Python/数据类型

维基教科书,自由的教学读本

Python是动态类型(dynamic typing)语言。

内建数据类型[编辑]

内建数据类型可分为几类:数值、序列、集合、映射﹑布林。

数值类型:

int
整数,例如1,2,3。Python 2中称为long
int1 = 1
int2 = 2
float
双精度浮点数,例如1.0, 234.5, 35.2
float1 = 2.3
float2 = 0.234
complex
复数,例如5j, 10+5j
complex1 = 10+5j
complex2 = 5j

序列类型:

类别 描述 例子
str 字串 a,abcde,12345,!@#$ Python 3.x
bytes 整数的位元组序列 b'\x00' Python 3.x
byte array 整数的位元组序列的字符串 1.0,234.5,35.2 Python 3.x
list 列表 [1 , 'apple']
tuple 元组 (1 , 'apple')
str
字串,例如'a','1','a1','!@#'
string1 = 'abc'
string2 = '12ab!@'

结合类型:

  • set: 可修改。从Python 2.6
  • frozen set: 不可修改。从Python 2.6

映射类型:

  • dict: 使用由花括号内由逗号分割的键: 值对的形式: 一个唯一的对应着一个, 例如:
{"a": 1, "b": 2, "c": 3}
  • bool: 有内建值TrueFalse。通常可与整数1与0对应互换。实际上,条件表达式可以接受任何类型的值,把特殊的如布尔值False、整数值0、空字符串""、空列表等任何空对象可以等效为False,其它所有情况等效为True

可变 vs 不可变的对象[编辑]

不可变的类型 可变的类型
  • int, float, complex
  • str
  • bytes
  • tuple
  • frozenset
  • bool
  • array
  • bytearray
  • list
  • set
  • dict

Python储存变量的方式是为值指派一个地址,然后变量指著该地址。可变与不可变指的是值,对于可变对象,每次变量改变会改变本来在该地址的值;对于不可变对象,每次变量改变会基于新的值重新指派地址。

从0开始[编辑]

对于Python,纪录预设是由0开始,不论是输出顺序数字的range(),还是储存多个数值的变量。第一个数值对于电脑是第零个,第二个是第一个,如此类推。

Null对象[编辑]

使用NoneNone不是空指针或空引用,而是一个单例。比较 None 应该用 is 而不要用 ==


if item is None:
  ...
  another = None #赋值

if not item is None:
  ...

if item is not None: # 同样是可以的
  ...

作为函数缺省参数:

def log(message, type=None):
  ...

类型转换[编辑]

v1 = int(2.7) # 2
v2 = int(-3.9) # -3
v3 = int("2") # 2
v4 = int("11", 16) # 17, 在十六进制下
v5 = long(2)
v6 = float(2) # 2.0
v7 = float("2.7") # 2.7
v8 = float("2.7E-2") # 0.027
v9 = float(False) # 0.0
vA = float(True) # 1.0
vB = str(4.5) # "4.5"
vC = str([1, 3, 5]) # "[1, 3, 5]"
vD = bool(0) # False
vE = bool(3) # True
vF = bool([]) # False - 空列表
vG = bool([False]) # True - 非空列表
vH = bool({}) # False - 空字典
vI = bool("") # False - 空字符串
vJ = bool(" ") # True - 非空字符串(字符串值为一个空格)
vK = bool(None) # False
vL = bool(len) # True
vM = set([1, 2])
vN = list(vM)
vO = list({1: "a", 2: "b"}) # [1, 2, 3]
vP = tuple(vN)
vQ = list("abc") # ['a', 'b', 'c']
print (v1, v2, v3, type(v1), type(v2), type(v3))

隐式类型转换:

int1 = 4
float1 = int1 + 2.1 # 4 被转换成了 float: 4.0
# str1 = "My int:" + int1 # 抛出错误: str 与 int 不能互相转换
str1 = "My int:" + str(int1)
int2 = 4 + True # 5: bool 可以被转换成 int