# 内置函数和类型
Python 解释器内置了很多函数 (opens new window)和类型 (opens new window),任何时候都能使用。
# 一、内置函数
# 输入输出
-
返回对象的长度或元素个数。
-
返回对象的可打印表示形式的字符串。
# 对象创建
数据类型转换或创建新对象。
-
返回一个基于数字或字符串构造的整数对象。
如果参数定义了
__int__(),int(x)将返回x.__int__()如果参数定义了
__index__(),则返回x.__index__()如果参数定义了
__trunc__(),则返回x.__trunc__()对于浮点数,它将向零舍入
一个进制为
n的整数包含0到n-1的数,其中a-z或A-Z表示10到35。默认的
base为10,允许的进制有0、2-36。2、8、16进制的数字可以在代码中用0b/0B、0o/0O、0x/0X前缀来表示。进制为
0将按照代码的字面量来精确解释,最后的结果会是2、8、10、16进制中的一个。# 非法 int('010', 0) # 合法 int('010') int('010', 8) # 二进制转十进制 int('0b_1111_0000', 2) -
返回一个
str对象。str(b'Hello', encoding="utf-8") -
返回一个新的
bytes对象,这是一个不可变序列,包含范围为0 <= x < 256的整数。bytes('Hello', encoding='utf8')
# 数学运算
数学计算和数值处理。
-
返回舍入到小数点后
ndigits位精度的值。round(2.675, 2) # 2.67
# 可迭代对象操作
生成、操作或处理可迭代对象。
enumerate (opens new window)()
返回一个枚举对象,里面包含一个计数值和通过迭代获得的值。
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] headers = {value: idx for idx, value in enumerate(seasons)} # {'Spring': 0, 'Summer': 1, 'Fall': 2, 'Winter': 3}
# 函数式编程工具
支持高阶函数或函数式编程。
-
使用
iterable中function返回真值的元素构造一个迭代器。numbers = [1, 6, 3, 8, 2, 7, 4] filtered_numbers = list(filter(lambda x: x < 5, numbers)) -
如果
iterable的所有元素均为真值,或可迭代对象为空,则返回True。if not all([username, password]): raise ValueError('用户名或密码为空')
# 反射与自省
检查或操作对象属性/类结构。
isinstance (opens new window)()
如果
object参数是classinfo参数或其子类的实例,则返回True。
# 文件与资源管理
文件操作或资源控制。
-
打开
file并返回对应的file对象,如果该文件不能被打开,则引发OSError(opens new window)。可用模式如下:
- r:读取,默认值。
- w:写入。
- x:排它性创建,如果文件已存在则失败。
- a:打开文件用于写入,如果文件存在则在末尾追加。
- b:二进制模式。
- t:文本模式,默认。
- +:打开用于更新,读取与写入。
# 二、内置类型
Python 解释器中内置的标准类型 (opens new window)涵盖了多种数据结构和对象类型,能够满足大多数编程需求。
# 数字类型
共有三种不同的数字类型 (opens new window):
- int (opens new window):整数
- float (opens new window):浮点数
- complex (opens new window):复数
- bool (opens new window):
int(opens new window) 的子类型
整数和浮点数支持下列运算 (opens new window):
| 运算 | 结果 |
|---|---|
x + y | x 和 y 的和 |
x - y | x 和 y 的差 |
x * y | x 和 y 的乘积 |
x / y | x 和 y 的商 |
x // y | x 和 y 的商数 |
x % y | x / y 的余数 |
-x | x 取反 |
+x | x 不变 |
abs(x) | x 的绝对值 |
int(x) | 将 x 转换为整数 |
float(x) | 将 x 转换为浮点数 |
divmod(x, y) | (x // y, x % y) |
pow(x, y) | x 的 y 次幂 |
x ** y | x 的 y 次幂 |
商数也称为整数除法,结果值是一个整数,但结果的类型不一定是 int。
运算结果总是向负无穷的方向舍入:
1//2为0(-1)//2为-11//(-2)为-1(-1)//(-2)为0
# 序列类型
有三种基本序列类型 (opens new window):
# 列表
列表 (opens new window)是可变序列,通常用于存放同类项目的集合。
可以用多种方式构建列表:
- 使用一对方括号来表示空列表:
[] - 使用方括号,其中的项以逗号分隔:
[a],[a, b, c] - 使用列表推导式:
[x for x in iterable] - 使用类型的构造器:
list()或list(iterable)
列表推导式提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,再然后是零个或多个 for 或者 if 语句。
返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。
例如:
[x * y for x in range(1, 5) if x > 2 for y in range(1, 4) if y < 3]
他的执行顺序是:
for x in range(1, 5):
if x > 2:
for y in range(1, 4):
if y < 3:
append(x * y)
# 元组
元组 (opens new window)是不可变序列,通常用于储存异构数据的多项集。
可以用多种方式构建元组:
- 使用一对圆括号来表示空元组:
() - 使用一个后缀的逗号来表示单元组:
a,或(a,) - 使用以逗号分隔的多个项:
a, b, c或(a, b, c) - 使用内置的
tuple():tuple()或tuple(iterable)
# range
range (opens new window) 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。
range (opens new window) 构造器的参数必须为整数,可以是内置的 int (opens new window) 或任何实现了 __index__() (opens new window) 特殊方法的对象。
# 文本序列类型
在 Python 中处理文本数据是使用 str (opens new window) 对象,也称为字符串。字符串是由 Unicode 码位构成的不可变序列。
字符串字面值有多种不同的写法:
- 单引号:
'允许包含有 "双" 引号' - 双引号:
"允许嵌入 '单' 引号" - 三重引号:
'''三重单引号''',"""三重双引号"""
字符串格式化:
-
print( 'hello %s %s, welcome to python world!' % ('新', '世界') )转换类型:
转换符 含意 'd'有符号十进制整数 's'字符串 -
字符串包含有以花括号
{}括起来的替换字段,不在花括号之内的内容被视为字面文本,会不加修改地复制到输出中。如果需要在字面文本中包含花括号字符,可以通过重复来转义:。"<User(name={self.name!r})>".format(self=self)格式化之前会进行类型强制转换。通常由该值本身的
__format__()(opens new window) 方法来完成。但是,在某些情况下最好强制将类型格式化为一个字符串,覆盖其本身的格式化定义。通过在调用__format__()(opens new window) 之前将值转换为字符串,可以绕过正常的格式化逻辑。目前支持的转换标识 (opens new window)有三种:
!s会对值调用str()(opens new window),!r调用repr()(opens new window) 而!a则调用ascii()(opens new window)。
字符串实现了所有一般序列的操作,还额外提供了以下列出的一些附加方法。
str.encode (opens new window)(encoding='utf-8', errors='strict')
返回编码为
bytes对象的版本。str.format (opens new window)(args, **kwargs)
执行字符串格式化操作。
"The sum of 1 + 2 is {0}".format(1+2) # 'The sum of 1 + 2 is 3'str.upper (opens new window)()
返回原字符串的副本,其中所有区分大小写的字符均转换为大写。
str.join (opens new window)(iterable)
调用该方法的字符串将作为元素之间的分隔。
print("&".join(["1", "2"]))
# 二进制序列类型
操作二进制数据的核心内置类型是:
bytes(opens new window):由单个字节构成的不可变序列bytearray(opens new window):bytes对象的可变对应物
bytes 和 bytearray 对象的下列方法可以用于任意二进制数据。
bytes.decode (opens new window)(encoding='utf-8', errors='strict')
返回解码为
str(opens new window) 的字符串。bytes.decode(b'Hello', encoding="utf-8")
# 映射类型
目前仅有一种标准映射类型 dict (opens new window)。
字典可用多种方式来创建:
字面量
body = { "data": self._data, "msg": self._msg, "code": self._code }字典推导式
以上面的字面量
body为基础,如果value为None,则删除。body = {k: v for k, v in body.items() if v is not None}
字典所支持的操作:
get (opens new window)(key[, default])
如果
key存在于字典中,则返回key的值,否则返回default。-
返回由字典键组成的一个新视图。
-
返回字典中所有键值对所组成的元组列表。
my_dict = {'apple': 1, 'banana': 2, 'orange': 3} for key, value in my_dict.items(): print(key, value) setdefault (opens new window)(key[, default])
如果字典存在键
key,返回它的值。如果不存在,插入值为default的键key,并返回default。update (opens new window)([other])
使用来自
other的键值对更新字典,覆盖原有的键。update()(opens new window) 接受另一个字典对象,或者一个包含键值对的可迭代对象。如果给出了关键字参数,则会以其所指定的键值对更新字典。d.update(red=1, blue=2)-
返回原字典的浅拷贝。