Data Type
基础类型
在 Python 中,能够直接处理的数据类型有以下几种:
int
Python 中理论上可以处理任意大小的整数,可以输入以下代码感受下:
>>> 2 ** 100000
同时标准又提供了 sys.maxsize
来表示任何我们实际工作中能够表示的最大的整型数值。
>>> import sys
>>> sys.maxsize
9223372036854775807
Python 2.x 中有 int
和 long
两种类型的整数,但这种区分对 Python 来说意义不大,因此在 Python 3.x 中整数只有 int
这一种了, 且 int
是没有限制大小的,可以当作 long
类型使用。
int 也支持二进制(如 0b100
)、八进制(如 0o100
)、十进制(100)和十六进制( 0x100
)的表示法。
对于很大的数,例如 10000000000
,很难数清楚 0 的个数。Python 允许在数字中间以 _
分隔,因此,写成 10_000_000_000
和 10000000000
是完全一样的。十六进制数也可以写成 0xa1b2_c3d4
。
Number 是不可变的,这就意味着如果改变 Number 的值,将重新分配内存空间。
float
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109 和 12.3x108 是完全相等的。浮点数可以用数学写法,如 1.23
,3.14
,-9.01
,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把 10 用 e 替代,1.23x109 就是 1.23e9
,或者 12.3e8
,0.000012 可以写成 1.2e-5
,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
complex
复数由实数部分和虚数部分构成,可以用 a + bj
, 或者 complex(a,b)
表示, 复数的实部 a 和虚部 b 可以是 int 或 float。比如 3 + 5j
,跟数学上的复数表示一样,唯一不同的是虚部的 i
换成了 j
。实际上,这个类型并不常用,了解一下就可以了。
str
字符串是以单引号或双引号括起来的任意文本,比如 'hello'
和 "hello"
,字符串还有原始字符串表示法、字节字符串表示法、Unicode 字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。
'''
line1
line2
'''
Output:
'\nline1\nline2\n'
print('''line1
line2''')
Output:
line1
line2
转义字符 \
可以转义很多字符,比如:'I\'m Kimi'
。
bytes
Python 对 bytes 类型的数据用带 b 前缀的单引号或双引号表示:
x = b'ABC'
b''
里面的字符只能是 ASCII,否则会报错:
>>> b'中文'
File "<ipython-input-114-241a368e5c3e>", line 1
b'中文'
^
SyntaxError: bytes can only contain ASCII literal characters.
bool
布尔值只有 True
、False
两种值(请注意大小写),也可以通过关系运算(比较运算)计算出来,例如 3 < 5
会产生布尔值 True
,而 2 == 1
会产生布尔值 False
。
比较运算符也称为关系运算符,包括==
、!=
、<
、>
、<=
、>=
。比较运算符会产生布尔值,要么是True
要么是False
。
逻辑运算符有三个,分别是and
、or
和not
。
bool 类型的值不同与其他语言,一定要注意开头字母大写。
None
空值是 Python 里一个特殊的值,用 None
表示。 None
不能理解为 0,因为 0 是有意义的,而 None
是一个特殊的空值。
变量
在 Python 中,变量命名需要遵循以下这些必须遵守硬性规则和强烈建议遵守的非硬性规则。
- 硬性规则:
- 变量名由字母(广义的 Unicode 字符,不包括特殊字符)、数字和下划线组成,且不能用数字开头。
- 大小写敏感。
- 不要跟关键字和系统保留字冲突。
- PEP 8 要求:
- 用小写字母拼写,多个单词用
_
连接。 - 受保护的实例属性用
_
开头。 - 私有的实例属性用
__
开头。
- 用小写字母拼写,多个单词用
常量
所谓常量就是不能变的变量,比如数学常数 π 就是一个常量。在 Python 中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
但事实上 PI
仍然是一个变量,Python 根本没有任何机制保证 PI 不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法。
类型检查
在 Python 中可以使用 type
函数对变量的类型进行检查。
a = 100
b = 12.345
c = 1 + 5j
d = 'hello, world'
e = b'ABC'
f = True
g = None
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'complex'>
print(type(d)) # <class 'str'>
print(type(e)) # <class 'bytes'>
print(type(f)) # <class 'bool'>
print(type(g)) # <class 'NoneType'>
类型转换
可以使用 Python 中内置的函数对变量类型进行转换。
int(x)
:将 x 转换成整数,可以指定进制。float(x)
:将 x 转换成浮点数。complex(x)
将 x 转换到一个复数,实数部分为 x,虚数部分为 0。complex(x, y)
将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。str(x)
:将 x 转换成字符串形式,可以指定编码。chr(x)
:将整数转换成该编码对应的字符串(一个字符)。ord(x)
:将字符串(一个字符)转换成对应的编码(整数)
str 不能直接和 int 比较,必须先把 str 通过 int()
函数转换成整数才能比较。
运算符
Python 支持多种运算符,下表大致按照优先级从高到低的顺序列出了所有的运算符。
运算符 | 描述 |
---|---|
[] [:] | 下标,切片 |
** | 指数 |
~ + - | 按位取反, 正负号 |
* / % // | 乘,除,模,整除 |
+ - | 加,减 |
>> << | 右移,左移 |
& | 按位与 |
^ \| | 按位异或,按位或 |
<= < > >= | 小于等于,小于,大于,大于等于 |
== != | 等于,不等于 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
= += -= *= /= %= //= **= &= |= ^= >>= <<= | (复合)赋值运算符 |
优先级:算数运算符 > 比较运算符 > 赋值运算符,比如 result = 1 + 1 > 1
先做1 + 1
产生 2
,再与 1
比较产生布尔值True
,再将这个值赋值给变量result
。