楼主: 宽客老丁
3689 35

[其他] The Python Library Reference [推广有奖]

11
数据洞见 发表于 2021-12-17 08:58:40
print(*objects, sep=’ ’, end=’\n’, file=sys.stdout, flush=False) 将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end。sep, end, file 和 flush 如果存在,
它们必须以关键字参数的形式给出。
所有非关键字参数都会被转换为字符串,就像是执行了str() 一样,并会被写入到流,以 sep 且在
末尾加上 end。sep 和 end 都必须为字符串;它们也可以为 None,这意味着使用默认值。如果没有
给出 objects,则print() 将只写入 end。
file 参数必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使
用sys.stdout。由于要打印的参数会被转换为文本字符串,因此print() 不能用于二进制模式
的文件对象。对于这些对象,应改用 file.write(...)。
输出是否被缓存通常决定于 file,但如果 flush 关键字参数为真值,流会被强制刷新。
在 3.3 版更改: 增加了 flush 关键字参数。

12
数据洞见 发表于 2021-12-17 08:59:00
zip(*iterables)
创建一个聚合了来自每个可迭代对象中的元素的迭代器。
返回一个元组的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。当
所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。当只有一个可迭代对象参数时,它
将返回一个单元组的迭代器。不带参数时,它将返回一个空迭代器。相当于:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
函数会保证可迭代对象按从左至右的顺序被求值。使得可以通过 zip(*[iter(s)]*n) 这样的惯
用形式将一系列数据聚类为长度为 n 的分组。这将重复 同样的迭代器 n 次,以便每个输出的元组
具有第 n 次调用该迭代器的结果。它的作用效果就是将输入拆分为长度为 n 的数据块。
当你不用关心较长可迭代对象末尾不匹配的值时,则zip() 只须使用长度不相等的输入即可。如
果那些值很重要,则应改用itertools.zip_longest()。

13
数据洞见 发表于 2021-12-17 08:59:17
数字类型 --- int, float, complex
存在三种不同的数字类型: 整数, 浮点数和 复数。此外,布尔值属于整数的子类型。整数具有无限的
精度。浮点数通常使用 C 中的 double 来实现;有关你的程序运行所在机器上浮点数的精度和内部
表示法可在sys.float_info 中查看。复数包含实部和虚部,分别以一个浮点数表示。要从一个复
数 z 中提取这两个部分,可使用 z.real 和 z.imag。(标准库包含附加的数字类型,如表示有理数
的fractions.Fraction 以及以用户定制精度表示浮点数的decimal.Decimal。)
数字是由数字字面值或内置函数与运算符的结果来创建的。不带修饰的整数字面值(包括十六进制、八
进制和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾
加上 'j' 或 'J' 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚
部的复数。

14
数据洞见 发表于 2021-12-17 08:59:38

数字类型 --- int, float, complex
存在三种不同的数字类型: 整数, 浮点数和 复数。此外,布尔值属于整数的子类型。整数具有无限的
精度。浮点数通常使用 C 中的 double 来实现;有关你的程序运行所在机器上浮点数的精度和内部
表示法可在sys.float_info 中查看。复数包含实部和虚部,分别以一个浮点数表示。要从一个复
数 z 中提取这两个部分,可使用 z.real 和 z.imag。(标准库包含附加的数字类型,如表示有理数
的fractions.Fraction 以及以用户定制精度表示浮点数的decimal.Decimal。)
数字是由数字字面值或内置函数与运算符的结果来创建的。不带修饰的整数字面值(包括十六进制、八
进制和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾
加上 'j' 或 'J' 会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚
部的复数。
Python 完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,” 较窄” 类型的操作数会
拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。不同类型的数字之间的比较,同
比较这些数字的精确值一样。2
构造函数int()、float() 和complex() 可以用来构造特定类型的数字

15
数据洞见 发表于 2021-12-17 08:59:53
import sys, math
def hash_fraction(m, n):
"""Compute the hash of a rational number m / n.
Assumes m and n are integers, with n positive.
Equivalent to hash(fractions.Fraction(m, n)).
"""
P = sys.hash_info.modulus
# Remove common factors of P. (Unnecessary if m and n already coprime.)
while m % P == n % P == 0:
m, n = m // P, n // P
if n % P == 0:
hash_value = sys.hash_info.inf
else:
# Fermat's Little Theorem: pow(n, P-1, P) is 1, so
# pow(n, P-2, P) gives the inverse of n modulo P.
hash_value = (abs(m) % P) * pow(n, P - 2, P) % P
if m < 0:
hash_value = -hash_value
if hash_value == -1:
hash_value = -2
return hash_value
def hash_float(x):
"""Compute the hash of a float x."""
if math.isnan(x):
return sys.hash_info.nan
elif math.isinf(x):
return sys.hash_info.inf if x > 0 else -sys.hash_info.inf
else:
return hash_fraction(*x.as_integer_ratio())
def hash_complex(z):
"""Compute the hash of a complex number z."""
hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag)
# do a signed reduction modulo 2**sys.hash_info.width
M = 2**(sys.hash_info.width - 1)
hash_value = (hash_value & (M - 1)) - (hash_value & M)
if hash_value == -1:

16
数据洞见 发表于 2021-12-17 09:00:09
迭代器类型
Python 支持在容器中进行迭代的概念。这是通过使用两个单独方法来实现的;它们被用于允许用户自定
义类对迭代的支持。将在下文中详细描述的序列总是支持迭代方法。
容器对象要提供迭代支持,必须定义一个方法:
container.__iter__()
返回一个迭代器对象。该对象需要支持下文所述的迭代器协议。如果容器支持不同的迭代类型,则
可以提供额外的方法来专门地请求不同迭代类型的迭代器。(支持多种迭代形式的对象的例子有同
时支持广度优先和深度优先遍历的树结构。)此方法对应于 Python/C API 中 Python 对象类型结构体
的 tp_iter 槽位。

17
数据洞见 发表于 2021-12-17 09:00:31
迭代器对象自身需要支持以下两个方法,它们共同组成了 迭代器协议:
iterator.__iter__()
返回迭代器对象本身。这是同时允许容器和迭代器配合 for 和 in 语句使用所必须的。此方法对应
于 Python/C API 中 Python 对象类型结构体的 tp_iter 槽位。
iterator.__next__()
从容器中返回下一项。如果已经没有项可返回,则会引发StopIteration 异常。此方法对应于
Python/C API 中 Python 对象类型结构体的 tp_iternext 槽位。
Python 定义了几种迭代器对象以支持对一般和特定序列类型、字典和其他更特别的形式进行迭代。除了
迭代器协议的实现,特定类型的其他性质对迭代操作来说都不重要。
一旦迭代器的__next__() 方法引发了StopIteration,它必须一直对后续调用引发同样的异常。不
遵循此行为特性的实现将无法正常使用。

18
数据洞见 发表于 2021-12-17 09:00:42
生成器类型
Python 的generator 提供了一种实现迭代器协议的便捷方式。如果容器对象 __iter__() 方法被实现为一
个生成器,它将自动返回一个迭代器对象(从技术上说是一个生成器对象),该对象提供 __iter__()
和 __next__() 方法。有关生成器的更多信息可以参阅 yield 表达式的文档。

19
数据洞见 发表于 2021-12-17 09:01:06
s[i] = x 将 s 的第 i 项替换为 x
已有 1 人评分经验 论坛币 收起 理由
yunnandlg + 100 + 100 精彩帖子

总评分: 经验 + 100  论坛币 + 100   查看全部评分

20
数据洞见 发表于 2021-12-17 09:01:22
s[i:j] = t 将 s 从 i 到 j 的切片替换为可迭代对象 t 的内容
已有 1 人评分经验 论坛币 收起 理由
yunnandlg + 100 + 100 精彩帖子

总评分: 经验 + 100  论坛币 + 100   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 18:52