Python
大约 3 分钟
Python
目录
泛操作
Python比起C/C++内置支持高级的数据结构类型
常量泛操作
使用
内置常量
False
:bool类型的假值True
:bool类型的真值None
:NoneType类型的唯一值。 None 经常用于表示缺少值,给其赋值是非法的并会引发SyntaxErrorNotImplemented
:双目运算特殊方法应返回的特殊值,用于表示运算没有针对其他类型的实现 也可由原地双目运算特殊方法,出于同样的目的而返回Ellipsis
:与省略号文字字面 “...
” 相同。 特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用__debug__
:如果 Python 没有以-O
选项启动,则此常量为真值。 另请参见assert
语句
变量泛操作(内置)
简概
使用
内置变量
像str、list、tuple、dict、set
、int、float、bool、complex
这种
(这些type不是关键词,是一种被初始化了的自带变量,可以被重赋值,重赋值后以重赋值的值为准)
声明、命名、赋值
- 变量声明:不声明变量类型
- 变量命名:略,推荐snake case
- 赋值写法:使用
=
解压缩简写:Python字面量支持解压缩简写特性:
x, y, x = list
【Python特有,但JS的ES6有类似的用法】等式右侧可以是任意线性序列,可称之为序列拆封(字典应为无序,所以用不了)
该写法本质是元组封装,其逆操作为元组赋值:
tuple = x, y, z
连等号简写:和C/C++语言一样支持:
x = y = c = k
(但C语言的连等号是依赖于表达式的广义性,原理不同)不具备表达式广义性:不能像C/C++那样可以将
值和符号的组合
看作表达式,不能这样写:x = (y = 1) + 1
符号
- 算术运算符:
+
-
*
/
//
%
**
(和C不同,Python斜杠是小数除法,双斜杠才是整数floor除法) (而且Python支持**表示平方,而C用math.h库的mod) - 比较运算符:
==
!=
<
>
>=
<=
><
,连续比较a < b < c < d
【Python特有】- 线性序列的可迭代对象的重载(列表/元组/字符串):一个一个元素比较,相同则比较下一个,直到遇到不相同的项,比较出大小
- 值的比较:整数和小数仅比较值,整数可以等于小数
- 字符的比较:字符串比较与可迭代对象相同,本质是比较字符。而字符比较的是ASCII顺序(不是自然排序)
- 逻辑运算符:
and
or
not
,其中and和or并成为短路操作符 - 逻辑操作符
- 区间判断:
in
not in
,使用举例:if item in list
、if item not in list
、if list
- 等同判断:
is
is not
- 区间判断:
- 组合赋值运算符:
+=
-=
*=
/=
%=
(和C语言一样)
类型查看(泛型)
变量判断:type()
函数
类型转换(泛型)
类型转换内置函数
- 转数值,
int()
- 转字典,
dict()
- 转字符串,
str()
- 转列表,
list()
- 字符串切割为列表:
[str].split(s)
- 字符串切割为列表:
- 转集合,
set()
- 打包,
zip(a1,a2)
- 可以把两个一维打包成一个深度为2的一维而不是二维(即可以使用两个序列来只遍历一次)
- 线性序列(一维)转换成enumerate对象(二维),
enumerate()
使用技巧
- 如
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
dict(sape=4139, guido=4127, jack=4098)
判断类型(包括类)
非类判断
其他
is in
is none
==
指数枚举值,用&和|来判断
if hasattr(item, "node") or isinstance(item, QDMGraphicsEdge) or item is None:
# Shift加左键 -> 伪装事件:按Shift修饰键时同时自动按Ctrl修饰键
if event.modifiers() & Qt.ShiftModifier:
event.ignore()
fake_event = QMouseEvent(QEvent.MouseButtonPress, event.localPos(), event.screenPos()
, Qt.LeftButton, event.buttons() | Qt.LeftButton
, event.modifiers() | Qt.ControlModifier)
super().mousePressEvent(fake_event)
return
判断对象的类
例如:
# '''
该文件中用了三种判断方法
(一)
type(item) is QDMGraphicsSocket
直接判断类型
(二)
isinstance(item, QDMGraphicsEdge)
可以判断派生类,这里的QDMGraphicsEdge有两个派生类
(三)
hasattr(item, 'node')
用于判断对象是否包含对应的属性,这里node里有:
grNode、socket - grSocket、title_item、content - grContent
# '''