Python/数据类型

维基教科书,自由的教学读本
跳到导航 跳到搜索

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

内建数据类型[编辑]

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

  • boolean: 有内建值TrueFalse。通常可与整数1 与 0对应互换。实际上,条件表达式可以接受任何类型的值,把特殊的如布尔值False、整数值0 、空字符串""、空列表可以等效为False,其它所有情况等效为True

数值类型:

  • int: 在Python 3.x不限长度。
  • long: 只用于Python 2.x
  • float: 双精度浮点数
  • complex: 复数

序列类型:

  • str: Python 3.x为Unicode字符串
  • bytes: 范围为0-255的整数序列,只用于Python 3.x
  • byte array: 类似于bytes,但可修改,只用于Python 3.x
  • list:列表
  • tuple:元组

结合类型:

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

映射类型:

  • dict:


可变 vs 不可变的对象[编辑]
不可变的类型 可变的类型
  • int, float, complex
  • str
  • bytes
  • tuple
  • frozenset
  • bool
  • array
  • bytearray
  • list
  • set
  • dict
def append_to_sequence (myseq):
    myseq += (9,9,9)
    return myseq

tuple1 = (1,2,3) # tuples are immutable
list1 = [1,2,3] # lists are mutable

tuple2 = append_to_sequence(tuple1)
list2 = append_to_sequence(list1)

print ('tuple1 = ', tuple1) # outputs (1, 2, 3)
print ('tuple2 = ', tuple2) # outputs (1, 2, 3, 9, 9, 9)
print ('list1 = ', list1) # outputs [1, 2, 3, 9, 9, 9]
print ('list2 = ', list2) # outputs [1, 2, 3, 9, 9, 9]
用字面量表示内建类型的值[编辑]

整数:

  • 直接写十进制数
  • 十六进制数加前缀0x or 0X
  • 八进制数
  • Python 2.x: 加前缀0 (0732 是十进制474)
  • Python 3.x: 加前缀0o 或 0O (0o732 是十进制474)

直接写浮点数

复数的虚部用后缀j (例如10+5j,或者10j)

字符串用一对单引号或双引号。使用三对单引号或双引号可以跨行。

元组使用圆括号,逗号分开:

(10, 'Mary had a little lamb')

无歧义时可以省略圆括号:

10, 'whose fleece was as white as snow'

单个元素的元组需要后缀一个逗号:

('this is a singleton tuple',)

列表使用方括号:

['abc', 1,2,3]

字典使用花括号,键值用冒号分隔,彼此之间用逗号分隔。

{ 'hello': 'world', 'weight': 'African or European?' }

Null对象[编辑]

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


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

if not item is None:
  ...

if item is not None: # Also possible
  ...

作为函数缺省参数:

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

类型转换[编辑]

v1 = int(2.7) # 2
v2 = int(-3.9) # -3
v3 = int("2") # 2
v4 = int("11", 16) # 17, base 16
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; bool fn since Python 2.2.1
vE = bool(3) # True
vF = bool([]) # False - empty list
vG = bool([False]) # True - non-empty list
vH = bool({}) # False - empty dict; same for empty tuple
vI = bool("") # False - empty string
vJ = bool(" ") # True - non-empty string
vK = bool(None) # False
vL = bool(len) # True
vM = set([1, 2])
vN = list(vM)
vO = list({1: "a", 2: "b"}) # dict -> list of keys
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 converted to float
# str1 = "My int:" + int1 # Error: no implicit type conversion from int to string
str1 = "My int:" + str(int1)
int2 = 4 + True # 5: bool is implicitly converted to int