数据类型
内置类型
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 | 不可变 | 表示值缺席的对象,在其他语言中经常叫做 null | None |
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要求:
- 用小写字母拼写,多个单词用下划线连接。
- 受保护的实例属性用单个下划线开头(后面会讲到)。
- 私有的实例属性用两个下划线开头(后面会讲到)。