python骚操作记录

学习、阅读源码时遇到的一时迷惑的python操作,记录一下
参见项目示例
github
gitee

作为一个c++菜鸡,刚开始看python源码,很多地方非常很习惯,比如缩进和大括号。有些地方还会折腾好久,特记录如下,以备后面查阅

实现?:操作符

很多语言中都有?:操作符。
比如C++

1
2
3
4

int y = 10;
int x = (y < 10) ? 30 : 40;

表示

1
2
3
4
5
6
7

int x = 40;
if(y < 10)
{
x = 30;
}

刚写python时也是按照上面的代码写。知道阅读pyside示例代码碰撞老鼠时,看到如下代码

1
2
3

self.angle += [-0.25, 0.25][self.angle < -Mouse.Pi / 2]

一度以为是矩阵运算,知道看了c++版示例才恍然大悟。原来python版的?:操作符可以这么实现:

1
2
3

x = [30, 40][y < 10]

python()[]{} 外加js[]{}着急把我搞迷糊了,赶紧复习一下。。。。

项目代码
github
gitee

字符串前加b, 表示后面字符串是bytes类型

‘PyQt’实现窗口动画,需要使用QPropertyAnimation类,仿造c++版动画代码,写出如下代码:

1
2
3

animationEnter = QPropertyAnimation(self.__newYearCountDown, 'pos', self)

执行时候程序崩溃

1
2
3
4
5

TypeError: arguments did not match any overloaded call:
QPropertyAnimation(parent: QObject = None): too many arguments
QPropertyAnimation(QObject, Union[QByteArray, bytes, bytearray], parent: QObject = None): argument 2 has unexpected type 'str'

PyQt没有QString类,str也无法隐式转换为Union[QByteArray, bytes, bytearray], 需要字符串前加 b,表示这是一个bytes对象

项目代码
github
gitee

参考文献博客园


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!