跳到主要内容

数据类型

内置类型

Python中的一切都是对象,变量是对象的引用!同时 Python 的动态语言特性变量和常量不需要事先声明类型。

Python 不同于其他程序设计语言使用存储期(存储空间生命周期) 对变量和对象进行管理,Python 使用引用计数,即引用对象的变量个数,对变量和对象进行管理。

Python 可以使用 id 函数获取标识值(伪指针)、type 函数获取类型。

Python 中根据值是否可以改变,类型分为两类:

  • 可变类型:列表、字典、集合等。
  • 不可变类型:数值、字符串、元组等。

如果对不可变类型的变量(引用的对象)的值进行变更、则会生成新的对象,然后变量重新引用新的对象。赋值语句复制的是对象的引用而不是值。 Python 的“变量”不同于其他程序语言的“变量”,Python 的“变量”翻译成“标志”更合适!

Python 3 内置类型如下,除了各种数据类型,Python 解释器内建了还有很多其他类型,比如上下文管理器类型,模块、方法、代码对象、类型对象、内部对象等类型。

类型可变性描述语法例子
bool不可变布尔值True False
int不可变理论上无限制大小的整数42
float不可变双精度浮点数。精度是机器依赖的但实际上一般实现为 64 位IEEE 754 数而带有 53 位的精度1.414
complex不可变复数,具有实部和虚部3+2.7j
range不可变通常用在循环中的数的序列,规定在 for 循环中的次数range(1, 10) range(10, -5, -2)
str不可变字符串,Unicode 代码点序列'Wikipedia' "Wikipedia" """Spanning multiple lines"""
bytes不可变字节序列b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105])
bytearray可变字节序列bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105])
list可变列表,可以包含混合的类型[4.0, 'string', True] []
tuple不可变元组,可以包含混合的类型(4.0, 'string', True) ('single element',) ()
dict可变键-值对的关联数组(或称字典);可以包含混合的类型(键和值),键必须是可散列的类型{'key1': 1.0, 3: False} {}
set可变无序集合,不包含重复项;可以包含混合的类型,如果可散列的话{4.0, 'string', True} set()
frozenset不可变无序集合,不包含重复项;可以包含混合的类型,如果可散列的话frozenset([4.0, 'string', True])
types.EllipsisType不可变省略号占位符,用作 NumPy 数组的索引... Ellipsis
types.NoneType不可变表示值缺席的对象,在其他语言中经常叫做 nullNone
types.NotImplementedType不可变可从重载运算符返回的占位符,用来指示未支持的运算数(operand)类型NotImplemented

类型转换

函数描述
int(x [,base])将x转换为一个整数
float(x)将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x)将对象 x 转换为字符串
repr(x)将对象 x 转换为表达式字符串
eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
set(s)转换为可变集合
dict(d)创建一个字典。d 必须是一个 (key, value)元组序列。
frozenset(s)转换为不可变集合
chr(x)将一个整数转换为一个字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串

运算符

在实际开发中,如果搞不清楚运算符的优先级,可以使用括号来确保运算的执行顺序

运算符描述
[] [:]下标,切片
**指数
~ + -按位取反, 正负号
* / % //乘,除,模,整除
+ -加,减
>> <<右移,左移
&按位与
^ ``
<= < > >=小于等于,小于,大于,大于等于
== !=等于,不等于
is is not身份运算符
in not in成员运算符
not or and逻辑运算符
= += -= *= /= %= //= **= &= `= ^= >>= <<=`

关键字

Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

$ import keyword
$ print(keyword.kwlist)

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

声明

硬性规则:

  • 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字下划线构成,数字不能开头
  • 大小写敏感(大写的a和小写的A是两个不同的变量)。
  • 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。

PEP 8要求:

  • 用小写字母拼写,多个单词用下划线连接。
  • 受保护的实例属性用单个下划线开头(后面会讲到)。
  • 私有的实例属性用两个下划线开头(后面会讲到)。