跳至主要內容

Python

LincZero大约 3 分钟

Python

目录

泛操作

Python比起C/C++内置支持高级的数据结构类型

常量泛操作

使用

内置常量

  • False:bool类型的假值
  • True:bool类型的真值
  • None:NoneType类型的唯一值。 None 经常用于表示缺少值,给其赋值是非法的并会引发SyntaxError
  • NotImplemented:双目运算特殊方法应返回的特殊值,用于表示运算没有针对其他类型的实现 也可由原地双目运算特殊方法,出于同样的目的而返回
  • Ellipsis:与省略号文字字面 “...” 相同。 特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用
  • __debug__:如果 Python 没有以 -Oopen in new window 选项启动,则此常量为真值。 另请参见 assertopen in new window 语句

变量泛操作(内置)

简概

使用

内置变量

str、list、tuple、dict、setint、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 listif item not in listif 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
# '''