🎧 New: AI-Generated Podcasts Turn your study notes into engaging audio conversations. Learn more

内置函数 — Python 3.12.6 文档.pdf

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Document Details

Tags

python functions built-in functions programming

Full Transcript

内置函数 Python 解释器内置了很多函数和类型,任何时候都能使⽤。以下按字⺟顺序给出列表。 内置函数 A E L R abs()...

内置函数 Python 解释器内置了很多函数和类型,任何时候都能使⽤。以下按字⺟顺序给出列表。 内置函数 A E L R abs() enumerate() len() range() aiter() eval() list() repr() all() exec() locals() reversed() anext() round() any() F M ascii() filter() map() S float() max() set() B format() memoryview() setattr() bin() frozenset() min() slice() bool() sorted() breakpoint() G N staticmethod() bytearray() getattr() next() str() bytes() globals() sum() O super() C H object() callable() hasattr() oct() T chr() hash() open() tuple() classmethod() help() ord() type() compile() hex() complex() P V I pow() vars() D id() print() delattr() input() property() Z dict() int() zip() dir() isinstance() divmod() issubclass() _ iter() __import__() abs(x) 返回⼀个数字的绝对值。 参数可以是整数、浮点数或任何实现了 __abs__() 的对 象。 如果参数是⼀个复数,则返回它的模。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 1/43 页 : : aiter(async_iterable) 返回 asynchronous iterable 的 asynchronous iterator 。相当于调⽤ x.__aiter__() 。 注意:与 iter() 不同, aiter() 没有两个参数的版本。 Added in version 3.10. all(iterable) 如果 iterable 的所有元素均为真值(或可迭代对象为空)则返回 True 。 等价于: def all(iterable): for element in iterable: if not element: return False return True awaitable anext(async_iterator) awaitable anext(async_iterator, default) 当进⼊ await 状态时,从给定 asynchronous iterator 返回下⼀数据项,迭代完毕则返 回 default。 这是内置函数 next() 的异步版本,类似于: 调⽤ async_iterator 的 __anext__() ⽅法,返回⼀个 awaitable。等待返回迭代器 的下⼀个值。若有给出 default,则在迭代完毕后会返回给出的值,否则会触发 StopAsyncIteration 。 Added in version 3.10. any(iterable) 如果 iterable 的任⼀元素为真值则返回 True 。 如果可迭代对象为空,返回 False 。 等价于: def any(iterable): for element in iterable: if element: return True https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 2/43 页 : : return False ascii(object) 与 repr() 类似,返回⼀个包含对象的可打印表示形式的字符串,但是使⽤ \x 、 \u 和 \U 对 repr() 返回的字符串中⾮ ASCII 编码的字符进⾏转义。⽣成的字符串和 Python 2 的 repr() 返回的结果相似。 bin(x) 将⼀个整数转换为带前缀 "0b" 的⼆进制数字符串。 结果是⼀个合法的 Python 表达 式。 如果 x 不是⼀个 Python int 对象,则它必须定义返回⼀个整数的 __index__() ⽅法。 下⾯是⼀些例⼦: >>> bin(3) >>> '0b11' >>> bin(-10) '-0b1010' 若要控制是否显示前缀“0b”,可以采⽤以下两种⽅案: >>> format(14, '#b'), format(14, 'b') >>> ('0b1110', '1110') >>> f'{14:#b}', f'{14:b}' ('0b1110', '1110') 另⻅ format() 获取更多信息。 class bool(object=False, /) 返回布尔值,即 True 或 False 中的⼀个。 其参数将使⽤标准的 真值测试过程 来转 换。 如果该参数为假值或被省略,则返回 False ;在其他情况下,将返回 True 。 bool 类是 int 的⼦类 (参⻅ 数字类型 --- int, float, complex)。 它不能被继续⼦类 化。 它只有 False 和 True 这两个实例 (参⻅ 布尔类型 - bool)。 在 3.7 版本发⽣变更: 该形参现在为仅限位置形参。 breakpoint(*args, **kws) This function drops you into the debugger at the call site. Specifically, it calls sys.breakpointhook() , passing args and kws straight through. By default, https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 3/43 页 : : sys.breakpointhook() calls pdb.set_trace() expecting no arguments. In this case, it is purely a convenience function so you don't have to explicitly import pdb or type as much code to enter the debugger. However, sys.breakpointhook() can be set to some other function and breakpoint() will automatically call that, allowing you to drop into the debugger of choice. If sys.breakpointhook() is not accessible, this function will raise RuntimeError. 在默认情况下, breakpoint() 的⾏为可使⽤ PYTHONBREAKPOINT 环境变量来改 变。 请参阅 sys.breakpointhook() 了解详细⽤法。 请注意这并不保证 sys.breakpointhook() 会被替换。 引发⼀个 审计事件 builtins.breakpoint 并附带参数 breakpointhook 。 Added in version 3.7. class bytearray(source=b'') class bytearray(source, encoding) class bytearray(source, encoding, errors) 返回⼀个新的 bytes 数组。 bytearray 类是⼀个可变序列,包含范围为 0 > complex('+1.23') >>> (1.23+0j) >>> complex('-4.5j') -4.5j >>> complex('-1.23+4.5j') (-1.23+4.5j) >>> complex('\t( -1.23+4.5J )\n') (-1.23+4.5j) >>> complex('-Infinity+NaNj') (-inf+nanj) >>> complex(1.23) (1.23+0j) >>> complex(imag=-4.5) -4.5j >>> complex(-1.23, 4.5) (-1.23+4.5j) 如果该参数为字符串,则它必须包含⼀个实部(使⽤与 float() 相同的格式)或⼀个 虚部(使⽤相同的格式但带有 'j' 或 'J' 后缀),或者同时包含实部和虚部(在此情 况下虚部必须加上正负号)。 该字符串⾸尾可以选择加上空格和圆括号 '(' and ')' ,它们将会被忽略。 该字符串的, which are ignored. The string must not contain whitespace between '+' , '-' , 'j' 或 'J' 后缀以及⼗进制数字之间不可 包含空格。 例如, complex('1+2j') 是可以的,但 complex('1 + 2j') 则会引 发 ValueError 。 更准确地说,输⼊在移除圆括号以及开头和末尾的空格符之后,必 须符合使⽤以下语法的 complexvalue 产⽣规则: https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 8/43 页 : : complexvalue ::= floatvalue | floatvalue ("j" | "J") | floatvalue sign absfloatvalue ("j" | "J") 如果该参数为数字,则此构造器将进⾏与 int 和 float 类似的数值转换。 对于⼀个 普通的 Python 对象 x , complex(x) 会委托给 x.__complex__() 。 如果未定义 __complex__() 则它将回退⾄ __float__() 。 如果未定义 __float__() 则它将 回退⾄ __index__() 。 如果提供了两个参数或是使⽤了关键字参数,则每个参数可以为任意数字类型(包括复 数)。 如果两个参数均为实数值,则会返回⼀个实部为 real ⽽虚部为 imag 的复数。 如果两个参数均为复数值,则会返回⼀个实部为 real.real-imag.imag ⽽虚部为 real.imag+imag.real 的复数。 如果有⼀个参数为实数值,则上⾯的表达式中将 只⽤到实部。 如果省略所有参数,则返回 0j 。 数字类型 --- int, float, complex 描述了复数类型。 在 3.6 版本发⽣变更: 您可以使⽤下划线将代码⽂字中的数字进⾏分组。 在 3.8 版本发⽣变更: 如果 __complex__() 和 __float__() 均未定义则回退 ⾄ __index__() 。 delattr(object, name) 这是 setattr() 的相关函数。 其参数是⼀个对象和⼀个字符串。 其中字符串必须是 对象的某个属性的名称。 该函数会删除指定的属性,如果对象允许这样做的话。 例 如, delattr(x, 'foobar') 等价于 del x.foobar 。 name 不要求必须是 Python 标识符 (参⻅ setattr() )。 class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) 创建⼀个新的字典。 dict 对象是⼀个字典类。参⻅ dict 和 映射类型 --- dict 了解 这个类。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 9/43 页 : : 其他容器类型,请参⻅内置的 list 、 set 和 tuple 类,以及 collections 模 块。 dir() dir(object) 如果没有实参,则返回当前本地作⽤域中的名称列表。如果有实参,它会尝试返回该对 象的有效属性列表。 如果对象有⼀个名为 __dir__() 的⽅法,则该⽅法将被调⽤并且必须返回由属列组 成的列表。 这允许实现⾃定义This allows objects that implement a custom __getattr__() 或 __getattribute__() 函数的对象能够定制 dir() 报告其属 性的⽅式。 如果对象未提供 __dir__() ,该函数会尽量从对象所定义的 __dict__ 属性和其类 型对象中收集信息。 结果列表不⼀定是完整的,并且当对象具有⾃定义的 __getattr__() 时还可能是不准确的。 默认的 dir() 机制对不同类型的对象⾏为不同,它会试图返回最相关⽽不是最全的信 息: 如果对象是模块对象,则列表包含模块的属性名称。 如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类 的属性。 否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有 基类的属性。 返回的列表按字⺟表排序。例如: >>> import struct >>> >>> dir() # show the names in the module namespace ['__builtins__', '__name__', 'struct'] >>> dir(struct) # show the names in the struct module ['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file '__initializing__', '__loader__', '__name__', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', 'unpack', 'unpack_from'] >>> class Shape: https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 10/43 页 : :... def __dir__(self):... return ['area', 'perimeter', 'location']... >>> s = Shape() >>> dir(s) ['area', 'location', 'perimeter'] 备注: 因为 dir() 主要是为了便于在交互式时使⽤,所以它会试图返回⼈们感兴趣 的名字集合,⽽不是试图保证结果的严格性或⼀致性,它具体的⾏为也可能在不同版 本之间改变。例如,当实参是⼀个类时,metaclass 的属性不包含在结果列表中。 divmod(a, b) 接受两个(⾮复数)数字作为参数并返回由当对其使⽤整数除法时的商和余数组成的数 字对。 在混⽤不同的操作数类型时,则会应⽤⼆元算术运算符的规则。 对于整数来 说,结果与 (a // b, a % b) 相同。 对于浮点数来说则结果为 (q, a % b) ,其 中 q 通常为 math.floor(a / b) 但可能会⽐它⼩ 1。 在任何情况下 q * b + a % b 都⾮常接近 a,如果 a % b 为⾮零值则它将具有与 b 相同的正负号,并且 0 >> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] 等价于: def enumerate(iterable, start=0): n = start for elem in iterable: yield n, elem n += 1 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 11/43 页 : : eval(expression, globals=None, locals=None) 参数: expression ( str | code object) -- ⼀个 Python 表达式。 globals ( dict | None ) -- 全局命名空间 (默认值: None )。 locals (mapping | None ) -- 局部命名空间 (默认值: None )。 返回: 被求值表达式的求值结果。 引发: 语法错误将作为异常被报告。 表达式解析参数 expression 并作为 Python 表达式进⾏求值(从技术上说是⼀个条件 列表),采⽤ globals 和 locals 字典作为全局和局部命名空间。 如果存在 globals 字 典,并且不包含 __builtins__ 键的值,则在解析 expression 之前会插⼊以该字符 串为键以对内置模块 builtins 的字典的引⽤为值的项。 这样就可以在将 globals 传 给 eval() 之前通过向其传⼊你⾃⼰的 __builtins__ 字典来控制可供被执⾏代码 可以使⽤哪些内置模块。 如果 locals 字典被省略则它默认为 globals 字典。 如果两个 字典都被省略,则将使⽤调⽤ eval() 的环境中的 globals 和 locals 来执⾏该表达 式。 注意,eval() ⽆法访问闭包环境中的 嵌套作⽤域 (⾮局部变量)。 示例: >>> x = 1 >>> >>> eval('x+1') 2 该函数还可⽤于执⾏任意代码对象(⽐如由 compile() 创建的对象)。 这时传⼊的 是代码对象,⽽⾮⼀个字符串了。如果代码对象已⽤参数为 mode 的 'exec' 进⾏了 编译,那么 eval() 的返回值将为 None 。 提示: exec() 函数⽀持语句的动态执⾏。 globals() 和 locals() 函数分别返回 当前的全局和本地字典,可供传给 eval() 或 exec() 使⽤。 如果给出的源数据是个字符串,那么其前后的空格和制表符将被剔除。 另外可以参阅 ast.literal_eval() ,该函数可以安全执⾏仅包含⽂字的表达式字 符串。 引发⼀个 审计事件 exec 附带代码对象作为参数。 代码编译事件也可能被引发。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 12/43 页 : : exec(object, globals=None, locals=None, /, *, closure=None) This function supports dynamic execution of Python code. object must be either a string or a code object. If it is a string, the string is parsed as a suite of Python statements which is then executed (unless a syntax error occurs). If it is a code object, it is simply executed. In all cases, the code that's executed is expected to be valid as file input (see the section ⽂件输⼊ in the Reference Manual). Be aware that the nonlocal , yield , and return statements may not be used outside of function definitions even within the context of code passed to the exec() function. The return value is None. 在所有情况下,如果省略了可选部分,代码将在当前作⽤域中执⾏。 如果只提供了 globals,则它必须是⼀个字典(并且不能是字典的⼦类),它将被同时⽤于全局和局 部变量。 如果给出了 globals 和 locals,它们将被分别⽤于全局和局部变量。 如果提 供了 locals,它可以是任何映射对象。 请记住在模块层级上,globals 和 locals 是同 ⼀个字典。 备注: Most users should just pass a globals argument and never locals. If exec gets two separate objects as globals and locals, the code will be executed as if it were embedded in a class definition. 如果 globals 字典不包含 __builtins__ 键值,则将为该键插⼊对内建 builtins 模块字典的引⽤。因此,在将执⾏的代码传递给 exec() 之前,可以通过将⾃⼰的 __builtins__ 字典插⼊到 globals 中来控制可以使⽤哪些内置代码。 closure 参数指定⼀个闭包 -- 即由 cellvar 组成的元组。 它仅在 object 是⼀个包含⾃ 由变量的代码对象时才可⽤。 该元组的⻓度必须与代码对象所引⽤的⾃由变量的数量 完全⼀致。 引发⼀个 审计事件 exec 附带代码对象作为参数。 代码编译事件也可能被引发。 备注: 内置 globals() 和 locals() 函数各⾃返回当前的全局和本地字典,因此 可以将它们传递给 exec() 的第⼆个和第三个实参。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 13/43 页 : : 备注: The default locals act as described for function locals() below: modifications to the default locals dictionary should not be attempted. Pass an explicit locals dictionary if you need to see effects of the code on locals after function exec() returns. 在 3.11 版本发⽣变更: 添加了 closure 参数。 filter(function, iterable) 使⽤ iterable 中 function 返回真值的元素构造⼀个迭代器。 iterable 可以是⼀个序 列,⼀个⽀持迭代的容器或者⼀个迭代器。 如果 function 为 None ,则会使⽤标识号 函数,也就是说,iterable 中所有具有假值的元素都将被移除。 请注意, filter(function, iterable) 相当于⼀个⽣成器表达式,当 function 不是 None 的时候为 (item for item in iterable if function(item)) ; function 是 None 的时候为 (item for item in iterable if item) 。 请参阅 itertools.filterfalse() 来了解返回 iterable 中 function 返回假值的 元素的补充函数。 class float(number=0.0, /) class float(string, /) 返回基于⼀个数字或字符串构建的浮点数。 示例: >>> float('+1.23') >>> 1.23 >>> float(' -12345\n') -12345.0 >>> float('1e-003') 0.001 >>> float('+1E6') 1000000.0 >>> float('-Infinity') -inf 如果该参数是⼀个字符串,则它应当包含⼀个⼗进制数字,前⾯可以选择带⼀个符号, https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 14/43 页 : : 也可以选择嵌⼊空格。 可选的符号有 '+' 或 '-' ; '+' 符号对所产⽣的值没有影 响。 该参数还可以是⼀个代表 NaN (not-a-number) 或者正负⽆穷⼤的字符串。 更确 切地说,在移除前导和尾随的空格之后,输⼊必须为符合以下语法的 floatvalue 产 ⽣规则: sign ::= "+" | "-" infinity ::= "Infinity" | "inf" nan ::= "nan" digit ::= >> hex(255) >>> '0xff' >>> hex(-42) '-0x2a' 如果要将整数转换为⼤写或⼩写的⼗六进制字符串,并可选择有⽆“0x”前缀,则可以 使⽤如下⽅法: >>> '%#x' % 255, '%x' % 255, '%X' % 255 >>> ('0xff', 'ff', 'FF') >>> format(255, '#x'), format(255, 'x'), format(255, 'X') ('0xff', 'ff', 'FF') >>> f'{255:#x}', f'{255:x}', f'{255:X}' ('0xff', 'ff', 'FF') 另⻅ format() 获取更多信息。 另请参阅 int() 将⼗六进制字符串转换为以 16 为基数的整数。 备注: 如果要获取浮点数的⼗六进制字符串形式,请使⽤ float.hex() ⽅法。 id(object) 返回对象的“标识值”。该值是⼀个整数,在此对象的⽣命周期中保证是唯⼀且恒定的。 两个⽣命期不重叠的对象可能具有相同的 id() 值。 CPython 实现细节: 这是对象在内存中的地址。 引发⼀个 审计事件 builtins.id 并附带参数 id 。 input() input(prompt) 如果存在 prompt 实参,则将其写⼊标准输出,末尾不带换⾏符。接下来,该函数从输 ⼊中读取⼀⾏,将其转换为字符串(除了末尾的换⾏符)并返回。当读取到 EOF 时, 则触发 EOFError 。例如: >>> s = input('--> ') >>> --> Monty Python's Flying Circus >>> s https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 18/43 页 : : "Monty Python's Flying Circus" 如果加载了 readline 模块, input() 将使⽤它来提供复杂的⾏编辑和历史记录功 能。 在读取输⼊前引发⼀个 审计事件 builtins.input 附带参数 prompt 在成功读取输⼊之后引发⼀个 审计事件 builtins.input/result 附带结果。 class int(number=0, /) class int(string, /, base=10) 返回从⼀个数字或字符串构建的整数对象,或者如果未给出参数则返回 0 。 示例: >>> int(123.45) >>> 123 >>> int('123') 123 >>> int(' -12_345\n') -12345 >>> int('FACE', 16) 64206 >>> int('0xface', 0) 64206 >>> int('01110011', base=2) 115 如果参数定义了 __int__() , int(x) 将返回 x.__int__() 。 如果参数定义了 __index__() ,它将返回 x.__index__() 。 如果参数定义了 __trunc__() ,它 将返回 x.__trunc__() 。 对于浮点数,这将向零⽅向截断。 如果参数不是数字或者如果给定了 base,则它必须是表示⼀个以 base 为基数的整数 的字符串、 bytes 或 bytearray 实例。 字符串前⾯还可选择加上 + 或 - (中间没有 空格),带有前导的零,带有两侧的空格,以及带有数位之间的单个下划线。 ⼀个以 n 为基数的整数字符串包含多个数位,每个数位代表从 0 到 n-1 范围内的值。 0--9 的值可以⽤任何 Unicode ⼗进制数码来表示。 10--35 的值可以⽤ a 到 z (或 A https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 19/43 页 : : 到 Z ) 来表示。 默认的 base 为 10。 允许的基数为 0 和 2--36。 对于基数 2, -8 和 -16 来说字符串前⾯还能加上可选的 0b / 0B , 0o / 0O 或 0x / 0X 前缀,就像代码中的整 数字⾯值那样。 对于基数 0 来说,字符串会以与 代码中的整数字⾯值 类似的⽅式来解 读,即实际的基数将由前缀确定为 2, 8, 10 或 16。 基数为 0 还会禁⽤前导的零: int('010', 0) 将是⽆效的,⽽ int('010') 和 int('010', 8) 则是有效的。 整数类型定义请参阅 数字类型 --- int, float, complex 。 在 3.4 版本发⽣变更: 如果 base 不是 int 的实例,但 base 对象有 base.__index__ ⽅法,则会调⽤该⽅法来获取进制数。以前的版本使⽤ base.__int__ ⽽不是 base.__index__ 。 在 3.6 版本发⽣变更: 您可以使⽤下划线将代码⽂字中的数字进⾏分组。 在 3.7 版本发⽣变更: 第⼀个形参现在是仅限位置形参。 在 3.8 版本发⽣变更: 如果 __int__() 未定义则回退⾄ __index__() 。 在 3.11 版本发⽣变更: 委托给 __trunc__() 的做法已被弃⽤。 在 3.11 版本发⽣变更: int 字符串输⼊和字符串表示形式可受到限制以帮助避免 拒绝服务攻击。当将⼀个字符串转换为 int 或者将⼀个 int 转换为字符串的操 作⾛出限制时会引发 ValueError 。 请参阅 整数字符串转换⻓度限制 ⽂档。 isinstance(object, classinfo) 如果 object 参数是 classinfo 参数的实例,或者是其 (直接、间接或 虚拟) ⼦类的实例 则返回 True 。 如果 object 不是给定类型的对象,则该函数总是返回 False 。 如果 classinfo 是由类型对象结成的元组 (或是由其他此类元组递归⽣成) 或者是多个类型的 union 类型,则如果 object 是其中任⼀类型的实例时将会返回 True 。 如果 classinfo 不是⼀个类型或类型元组及此类元组,则会引发 TypeError 异常。 如果之前的检查 成功执⾏则可以不会为⽆效的类型引发 TypeError 。 在 3.10 版本发⽣变更: classinfo 可以是⼀个 union 类型。 issubclass(class, classinfo) 如果 class 是 classinfo 的⼦类(直接、间接或 虚的 ),则返回 True 。类将视为⾃⼰ https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 20/43 页 : : 的⼦类。classinfo 可为类对象的元组(或递归地,其他这样的元组)或 union 类型, 这时如果 class 是 classinfo 中任何条⽬的⼦类,则返回 True 。任何其他情况都会触 发 TypeError 异常。 在 3.10 版本发⽣变更: classinfo 可以是⼀个 union 类型。 iter(object) iter(object, sentinel) 返回⼀个 iterator 对象。 根据是否存在第⼆个参数,对第⼀个参数的解读会有很⼤的 不同。 如果没有第⼆个参数,object 必须是⼀个⽀持 iterable 协议 (有 __iter__() ⽅法) 的多项集对象,或者必须⽀持序列协议 (有 __getitem__() ⽅法并使⽤从 0 开始的整数参数)。 如果它不⽀持这些协议,则会引发 TypeError 。 如果给出了第⼆ 个参数 sentinel,则 object 必须是⼀个可调⽤对象。 在这种情况下创建的迭代器将针 对每次调⽤其 __next__() ⽅法不带参数地调⽤ object;如果返回的值等于 sentinel,则会引发 StopIteration ,否则将返回该值。 另请参阅 迭代器类型。 适合 iter() 的第⼆种形式的应⽤之⼀是构建块读取器。 例如,从⼆进制数据库⽂件 中读取固定宽度的块,直⾄到达⽂件的末尾: from functools import partial with open('mydata.db', 'rb') as f: for block in iter(partial(f.read, 64), b''): process_block(block) len(s) 返回对象的⻓度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。 CPython 实现细节: len 对于⼤于 sys.maxsize 的⻓度如 range(2 ** 100) 会引发 OverflowError 。 class list class list(iterable) 虽然被称为函数, list 实际上是⼀种可变序列类型,详情请参阅 列表 和 序列类型 -- https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 21/43 页 : : - list, tuple, range。 locals() Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks. Note that at the module level, locals() and globals() are the same dictionary. 备注: The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter. map(function, iterable, *iterables) 返回⼀个将 function 应⽤于 iterable 的每⼀项,并产⽣其结果的迭代器。 如果传⼊了 额外的 iterables 参数,则 function 必须接受相同个数的参数并被⽤于到从所有可迭代 对象中并⾏获取的项。 当有多个可迭代对象时,当最短的可迭代对象耗尽则整个迭代 将会停⽌。 对于函数的输⼊已经是参数元组的情况,请参阅 itertools.starmap() 。 max(iterable, *, key=None) max(iterable, *, default, key=None) max(arg1, arg2, *args, key=None) 返回可迭代对象中最⼤的元素,或者返回两个及以上实参中最⼤的。 如果只提供了⼀个位置参数,它必须是⾮空 iterable,返回可迭代对象中最⼤的元素; 如果提供了两个及以上的位置参数,则返回最⼤的位置参数。 有两个可选只能⽤关键字的实参。key 实参指定排序函数⽤的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。如果可迭代对象为 空,并且没有给 default ,则会触发 ValueError 。 如果有多个最⼤元素,则此函数将返回第⼀个找到的。这和其他稳定排序⼯具如 sorted(iterable, key=keyfunc, reverse=True) 和 heapq.nlargest(1, iterable, key=keyfunc) 保持⼀致。 在 3.4 版本发⽣变更: 增加了 default 仅限关键字形参。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 22/43 页 : : 在 3.8 版本发⽣变更: key 可以为 None 。 class memoryview(object) 返回由给定实参创建的“内存视图”对象。有关详细信息,请参阅 内存视图。 min(iterable, *, key=None) min(iterable, *, default, key=None) min(arg1, arg2, *args, key=None) 返回可迭代对象中最⼩的元素,或者返回两个及以上实参中最⼩的。 如果只提供了⼀个位置参数,它必须是 iterable,返回可迭代对象中最⼩的元素;如果 提供了两个及以上的位置参数,则返回最⼩的位置参数。 有两个可选只能⽤关键字的实参。key 实参指定排序函数⽤的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。如果可迭代对象为 空,并且没有给 default ,则会触发 ValueError 。 如果有多个最⼩元素,则此函数将返回第⼀个找到的。这和其他稳定排序⼯具如 sorted(iterable, key=keyfunc) 和 heapq.nsmallest(1, iterable, key=keyfunc) 保持⼀致。 在 3.4 版本发⽣变更: 增加了 default 仅限关键字形参。 在 3.8 版本发⽣变更: key 可以为 None 。 next(iterator) next(iterator, default) 通过调⽤ iterator 的 __next__() ⽅法获取下⼀个元素。如果迭代器耗尽,则返回给 定的 default,如果没有默认值则触发 StopIteration 。 class object 返回⼀个不带特征的新对象。 object 是所有类的基类。它带有所有 Python 类实例均 通⽤的⽅法。本函数不接受任何参数。 备注: 由于 object 没有 __dict__ ,因此⽆法将任意属性赋给 object 的实 例。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 23/43 页 : : oct(x) 将整数转换为带前缀 "0o" 的⼋进制数字符串。 结果是⼀个合法的 Python 表达式。 如果 x 不是⼀个 Python int 对象,则它必须定义返回⼀个整数的 __index__() ⽅ 法。 例如: >>> oct(8) >>> '0o10' >>> oct(-56) '-0o70' 若要将整数转换为⼋进制字符串,并可选择是否带有“0o”前缀,可采⽤如下⽅法: >>> '%#o' % 10, '%o' % 10 >>> ('0o12', '12') >>> format(10, '#o'), format(10, 'o') ('0o12', '12') >>> f'{10:#o}', f'{10:o}' ('0o12', '12') 另⻅ format() 获取更多信息。 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 打开 file 并返回对应的 file object。 如果该⽂件不能被打开,则引发 OSError 。 请 参阅 读写⽂件 获取此函数的更多⽤法示例。 file 是⼀个 path-like object,表示将要打开的⽂件的路径(绝对路径或者相对当前⼯ 作⽬录的路径),也可以是要封装⽂件对应的整数类型⽂件描述符。(如果给出的是⽂ 件描述符,则当返回的 I/O 对象关闭时它也会关闭,除⾮将 closefd 设为 False 。) mode is an optional string that specifies the mode in which the file is opened. It defaults to 'r' which means open for reading in text mode. Other common values are 'w' for writing (truncating the file if it already exists), 'x' for exclusive creation, and 'a' for appending (which on some Unix systems, means that all writes append to the end of the file regardless of the current seek position). In text mode, if encoding is not specified the encoding used is https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 24/43 页 : : platform-dependent: locale.getencoding() is called to get the current locale encoding. (For reading and writing raw bytes use binary mode and leave encoding unspecified.) The available modes are: 字符 含意 'r' 读取(默认) 'w' 写⼊,并先截断⽂件 'x' 排它性创建,如果⽂件已存在则失败 'a' 打开⽂件⽤于写⼊,如果⽂件存在则在末尾追加 'b' ⼆进制模式 't' ⽂本模式(默认) '+' 打开⽤于更新(读取与写⼊) 默认模式为 'r' (打开⽂件⽤于读取⽂本,与 'rt' 同义)。 'w+' 和 'w+b' 模式 将打开⽂件并清空内容。⽽ 'r+' 和 'r+b' 模式将打开⽂件但不清空内容。 正如在 概述 中提到的,Python区分⼆进制和⽂本I/O。以⼆进制模式打开的⽂件(包 括 mode 参数中的 'b' )返回的内容为 bytes 对象,不进⾏任何解码。在⽂本模式 下(默认情况下,或者在 mode 参数中包含 't' )时,⽂件内容返回为 str ,⾸先 使⽤指定的 encoding (如果给定)或者使⽤平台默认的的字节编码解码。 备注: Python不依赖于底层操作系统的⽂本⽂件概念;所有处理都由Python本身完 成,因此与平台⽆关。 buffering 是⼀个可选的整数,⽤于设置缓冲策略。 传⼊ 0 来关闭缓冲(仅在⼆进制模 式下允许),传⼊ 1 来选择⾏缓冲(仅在⽂本模式下写⼊时可⽤),传⼀个整数 > 1 来 表示固定⼤⼩的块缓冲区的字节⼤⼩。 注意这样指定缓冲区的⼤⼩适⽤于⼆进制缓冲 的 I/O,但 TextIOWrapper (即⽤ mode='r+' 打开的⽂件) 会有另⼀种缓冲。 要禁⽤ TextIOWrapper 中的缓冲,请考虑为 io.TextIOWrapper.reconfigure() 使 ⽤ write_through 旗标。 当没有给出 buffering 参数时,默认的缓冲策略规则如下: https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 25/43 页 : : ⼆进制⽂件以固定⼤⼩的块进⾏缓冲;缓冲区的⼤⼩是使⽤启发⽅式来尝试确定 底层设备的“块⼤⼩”并会回退⾄ io.DEFAULT_BUFFER_SIZE 。 在许多系统 上,缓冲区的⻓度通常为 4096 或 8192 字节。 “交互式”⽂本⽂件( isatty() 返回 True 的⽂件)使⽤⾏缓冲。其他⽂本⽂ 件使⽤上述策略⽤于⼆进制⽂件。 encoding 是⽤于编码或编码⽂件的编码格式名称。 这应当只有⽂本模式下使⽤。 默 认的编码格式依赖于具体平台 (即 locale.getencoding() 所返回的值),但是任何 Python ⽀持的 text encoding 都可以被使⽤。 请参阅 codecs 模块获取受⽀持的编 码格式列表。 errors 是⼀个可选的字符串参数,⽤于指定如何处理编码和解码错误 - 这不能在⼆进 制模式下使⽤。可以使⽤各种标准错误处理程序(列在 错误处理⽅案 ),但是使⽤ codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括: 如果存在编码错误, 'strict' 会引发 ValueError 异常。 默认值 None 具有 相同的效果。 'ignore' 忽略错误。请注意,忽略编码错误可能会导致数据丢失。 'replace' 会将替换标记(例如 '?' )插⼊有错误数据的地⽅。 'surrogateescape' 将把任何不正确的字节表示为 U+DC80 ⾄ U+DCFF 范 围内的下⽅替代码位。 当在写⼊数据时使⽤ surrogateescape 错误处理器时 这些替代码位会被转回到相同的字节。 这适⽤于处理具有未知编码格式的⽂件。 'xmlcharrefreplace' 仅在写⼊⽂件时才受到⽀持。 编码格式不⽀持的字符 将被替换为相应的 XML 字符引⽤ &#nnn; 。 'backslashreplace' ⽤Python的反向转义序列替换格式错误的数据。 'namereplace' (也只在编写时⽀持)⽤ \N{...} 转义序列替换不⽀持的字 符。 newline 决定如何解析来⾃流的换⾏符。 它可以为 None , '' , '\n' , '\r' 和 '\r\n' 。 它的⼯作原理如下: 从流中读取输⼊时,如果 newline 为 None ,则启⽤通⽤换⾏模式。输⼊中的⾏ 可以以 '\n' , '\r' 或 '\r\n' 结尾,这些⾏被翻译成 '\n' 在返回呼叫者之 前。如果它是 '' ,则启⽤通⽤换⾏模式,但⾏结尾将返回给调⽤者未翻译。如 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 26/43 页 : : 果它具有任何其他合法值,则输⼊⾏仅由给定字符串终⽌,并且⾏结尾将返回给 未调⽤的调⽤者。 将输出写⼊流时,如果 newline 为 None ,则写⼊的任何 '\n' 字符都将转换为 系统默认⾏分隔符 os.linesep 。如果 newline 是 '' 或 '\n' ,则不进⾏翻 译。如果 newline 是任何其他合法值,则写⼊的任何 '\n' 字符将被转换为给定 的字符串。 如果 closefd 为 False 且给出的不是⽂件名⽽是⽂件描述符,那么当⽂件关闭时,底 层⽂件描述符将保持打开状态。如果给出的是⽂件名,则 closefd 必须为 True (默 认值),否则将触发错误。 可以通过传递可调⽤的 opener 来使⽤⾃定义开启器。然后通过使⽤参数( file,flags )调⽤ opener 获得⽂件对象的基础⽂件描述符。 opener 必须返回⼀个打开的⽂件描 述符(使⽤ os.open as opener 时与传递 None 的效果相同)。 新创建的⽂件是 不可继承的。 下⾯的示例使⽤ os.open() 函数的 dir_fd 的形参,从给定的⽬录中⽤相对路径打开 ⽂件: >>> import os >>> >>> dir_fd = os.open('somedir', os.O_RDONLY) >>> def opener(path, flags):... return os.open(path, flags, dir_fd=dir_fd)... >>> with open('spamspam.txt', 'w', opener=opener) as f:... print('This will be written to somedir/spamspam.txt', file=f)... >>> os.close(dir_fd) # don't leak a file descriptor open() 函数所返回的 file object 类型取决于所⽤模式。 当使⽤ open() 以⽂本模式 ( 'w' , 'r' , 'wt' , 'rt' 等) 打开⽂件时,它将返回 io.TextIOBase (具体为 io.TextIOWrapper ) 的⼀个⼦类。 当使⽤缓冲以⼆进制模式打开⽂件时,返回的类 是 io.BufferedIOBase 的⼀个⼦类。 具体的类会有多种:在只读的⼆进制模式 下,它将返回 io.BufferedReader ;在写⼊⼆进制和追加⼆进制模式下,它将返回 io.BufferedWriter ,⽽在读/写模式下,它将返回 io.BufferedRandom 。 当禁 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 27/43 页 : : ⽤缓冲时,则会返回原始流,即 io.RawIOBase 的⼀个⼦类 io.FileIO 。 另请参阅⽂件操作模块,如 fileinput 、 io (声明了 open() )、 os 、 os.path 、 tempfile 和 shutil 。 引发⼀个 审计事件 open 并附带参数 path , mode , flags 。 mode 与 flags 参数可以在原始调⽤的基础上被修改或传递。 在 3.3 版本发⽣变更: 增加了 opener 形参。 增加了 'x' 模式。 过去触发的 IOError ,现在是 OSError 的别名。 如果⽂件已存在但使⽤了排它性创建模式( 'x' ),现在会触发 FileExistsError 。 在 3.4 版本发⽣变更: ⽂件现在禁⽌继承。 在 3.5 版本发⽣变更: 如果系统调⽤被中断,但信号处理程序没有触发异常,此函数现在会重试系 统调⽤,⽽不是触发 InterruptedError 异常 (原因详⻅ PEP 475)。 增加了 'namereplace' 错误处理接⼝。 在 3.6 版本发⽣变更: 增加对实现了 os.PathLike 对象的⽀持。 在 Windows 上,打开⼀个控制台缓冲区将返回 io.RawIOBase 的⼦类, ⽽不是 io.FileIO 。 在 3.11 版本发⽣变更: 'U' 模式已被移除。 ord(c) 对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。例如 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 28/43 页 : : ord('a') 返回整数 97 , ord('€') (欧元符号)返回 8364 。这是 chr() 的逆 函数。 pow(base, exp, mod=None) 返回 base 的 exp 次幂;如果 mod 存在,则返回 base 的 exp 次幂对 mod 取余(⽐ pow(base, exp) % mod 更⾼效)。 两参数形式 pow(base, exp) 等价于乘⽅运 算符: base**exp 。 这些参数必须为数字类型。 对于混⽤的操作数类型,将应⽤⼆元算术运算的强制转换 规则。 对于 int 操作数,结果具有与操作数相同的类型(转换之后)除⾮第⼆个参数 为负值;在那种情况下,所有参数将被转换为浮点数并输出浮点数的结果。 例如, pow(10, 2) 返回 100 ,⽽ pow(10, -2) 返回 0.01 。 对于 int 或 float 类型 的基数为负值⽽幂为⾮整数的情况,将产⽣⼀个复数的结果。 例如, pow(-9, 0.5) 将返回⼀个接近 3j 的值。 最后,对于 int 或 float 类型的基数为负值⽽幂为整数 的情况,将产⽣⼀个浮点数的结果。 例如, pow(-9, 2.0) 将返回 81.0 。 对于 int 操作数 base 和 exp,如果给出 mod,则 mod 必须为整数类型并且 mod 必 须不为零。 如果给出 mod 并且 exp 为负值,则 base 必须相对于 mod 不可整除。 在 这种情况下,将会返回 pow(inv_base, -exp, mod) ,其中 inv_base 为 base 的 倒数对 mod 取余。 下⾯的例⼦是 38 的倒数对 97 取余: >>> pow(38, -1, mod=97) >>> 23 >>> 23 * 38 % 97 == 1 True 在 3.8 版本发⽣变更: 对于 int 操作数,三参数形式的 pow 现在允许第⼆个参数 为负值,即可以计算倒数的余数。 在 3.8 版本发⽣变更: 允许关键字参数。 之前只⽀持位置参数。 print(*objects, sep=' ', end='\n', file=None, flush=False) 将 objects 打印输出⾄ file 指定的⽂本流,以 sep 分隔并在末尾加上 end。 sep 、 end 、 file 和 flush 必须以关键字参数的形式给出。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 29/43 页 : : 所有⾮关键字参数都会被转换为字符串,就像是执⾏了 str() ⼀样,并会被写⼊到 流,以 sep 分隔并在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None ,这意味着使⽤默认值。 如果没有给出 objects,则 print() 将只写⼊ end。 file 参数必须是⼀个具有 write(string) ⽅法的对象;如果参数不存在或为 None ,则将使⽤ sys.stdout 。 由于要打印的参数会被转换为⽂本字符串,因此 print() 不能⽤于⼆进制模式的⽂件对象。 对于这些对象,应改⽤ file.write(...) 。 输出缓冲通常由 file 确定。 但是,如果 flush 为真值,流将被强制刷新。 在 3.3 版本发⽣变更: 增加了 flush 关键字参数。 class property(fget=None, fset=None, fdel=None, doc=None) 返回 property 属性。 fget 是获取属性值的函数。 fset 是⽤于设置属性值的函数。 fdel 是⽤于删除属性值的 函数。并且 doc 为属性对象创建⽂档字符串。 ⼀个典型的⽤法是定义⼀个托管属性 x : class C: def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") 如果 c 为 C 的实例, c.x 将调⽤ getter, c.x = value 将调⽤ setter, del c.x 将调⽤ deleter。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 30/43 页 : : 如果给出,doc 将成为该 property 属性的⽂档字符串。 否则该 property 将拷⻉ fget 的⽂档字符串(如果存在)。 这令使⽤ property() 作为 decorator 来创建只读的 特征属性可以很容易地实现: class Parrot: def __init__(self): self._voltage = 100000 @property def voltage(self): """Get the current voltage.""" return self._voltage @property 装饰器会将 voltage() ⽅法转化为⼀个具有相同名称的只读属性 "getter",并将 voltage 的⽂档字符串设为 "Get the current voltage." @getter @setter @deleter 特征属性对象具有 getter , setter 和 deleter ⽅法,它们可⽤作装饰器来创 建该特征属性的副本,并将相应的访问函数设为所装饰的函数。 这最好是⽤⼀个 例⼦来说明: class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 31/43 页 : : del self._x 上述代码与第⼀个例⼦完全等价。 注意⼀定要给附加函数与原始的特征属性相同 的名称 (在本例中为 x 。) 返回的特征属性对象同样具有与构造器参数相对应的属性 fget , fset 和 fdel 。 在 3.5 版本发⽣变更: 特征属性对象的⽂档字符串现在是可写的。 class range(stop) class range(start, stop, step=1) 虽然被称为函数,但 range 实际上是⼀个不可变的序列类型,参⻅在 range 对象 与 序列类型 --- list, tuple, range 中的⽂档说明。 repr(object) 返回包含⼀个对象的可打印表示形式的字符串。 对于许多类型⽽⾔,此函数会尝试返 回⼀个具有与传给 eval() 时相同的值的字符串;在其他情况下,其表示形式将为⼀ 个包含对象类型名称和通常包括对象名称和地址的额外信息的⽤尖括号括起来的字符 串。 ⼀个类可以通过定义 __repr__() ⽅法来控制此函数为其实例所返回的内容。 如果 sys.displayhook() 不可访问,则此函数将会引发 RuntimeError 。 该类具有⾃定义的表示形式,它可被求值为: class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person('{self.name}', {self.age})" reversed(seq) 返回⼀个反向的 iterator。 seq 必须是⼀个具有 __reversed__() ⽅法或是⽀持序 列协议(具有 __len__() ⽅法和从 0 开始的整数参数的 __getitem__() ⽅法)的 对象。 round(number, ndigits=None) https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 32/43 页 : : 返回 number 舍⼊到⼩数点后 ndigits 位精度的值。 如果 ndigits 被省略或为 None , 则返回最接近输⼊值的整数。 对于⽀持 round() ⽅法的内置类型,结果值会舍⼊⾄最接近的 10 的负 ndigits 次幂 的倍数;如果与两个倍数同样接近,则选⽤偶数。因此, round(0.5) 和 round(-0.5) 均得出 0 ⽽ round(1.5) 则为 2 。ndigits 可为任意整数值(正数、 零或负数)。如果省略了 ndigits 或为 None ,则返回值将为整数。否则返回值与 number 的类型相同。 对于⼀般的 Python 对象 number , round 将委托给 number.__round__ 。 备注: 对浮点数执⾏ round() 的⾏为可能会令⼈惊讶:例如, round(2.675, 2) 将给出 2.67 ⽽不是期望的 2.68 。 这不算是程序错误:这⼀结果是由于⼤多数 ⼗进制⼩数实际上都不能以浮点数精确地表示。 请参阅 浮点算术:争议和限制 了解 更多信息。 class set class set(iterable) 返回⼀个新的 set 对象,可以选择带有从 iterable 获取的元素。 set 是⼀个内置类 型。 请查看 set 和 集合类型 --- set, frozenset 获取关于这个类的⽂档。 有关其他容器请参看内置的 frozenset , list , tuple 和 dict 类,以及 collections 模块。 setattr(object, name, value) 本函数与 getattr() 相对应。其参数为⼀个对象、⼀个字符串和⼀个任意值。字符 串可以为某现有属性的名称,或为新属性。只要对象允许,函数会将值赋给属性。如 setattr(x, 'foobar', 123) 等价于 x.foobar = 123 。 name ⽆需为在 标识符和关键字 中定义的 Python 标识符除⾮对象选择强制这样做, 例如在⼀个⾃定义的 __getattribute__() 中或是通过 __slots__ 。 ⼀个名称不 为标识符的属性将不可使⽤点号标记来访问,但是可以通过 getattr() 等来访问。 备注: 由于 私有名称混合 发⽣在编译时,因此必须⼿动混合私有属性(以两个下划 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 33/43 页 : : 线打头的属性)名称以便使⽤ setattr() 来设置它。 class slice(stop) class slice(start, stop, step=None) 返回⼀个表示由 range(start, stop, step) 指定的索引集的 slice 对象。 start 和 step 参数默认为 None 。 start stop step 切⽚对象具有只读的数据属性 start , stop 和 step ,它们将简单地返回相应的 参数值(或其默认值)。 它们没有其他显式的功能;但是,它们会被 NumPy 和 其他第三⽅包所使⽤。 当使⽤扩展索引语法时也会⽣成切⽚对象。 例如: a[start:stop:step] 或 a[start:stop, i] 。 请参阅 itertools.islice() 了解返回 iterator 的替代版 本。 在 3.12 版本发⽣变更: Slice 对象现在将为 hashable (如果 start , stop 和 step 均为可哈希对象)。 sorted(iterable, /, *, key=None, reverse=False) 根据 iterable 中的项返回⼀个新的已排序列表。 具有两个可选参数,它们都必须指定为关键字参数。 key 指定带有单个参数的函数,⽤于从 iterable 的每个元素中提取⽤于⽐较的键 (例如 key=str.lower )。 默认值为 None (直接⽐较元素)。 reverse 为⼀个布尔值。 如果设为 True ,则每个列表元素将按反向顺序⽐较进⾏排 序。 使⽤ functools.cmp_to_key() 可将⽼式的 cmp 函数转换为 key 函数。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 34/43 页 : : 内置的 sorted() 确保是稳定的。 如果⼀个排序确保不会改变⽐较结果相等的元素的 相对顺序就称其为稳定的 --- 这有利于进⾏多重排序(例如先按部⻔、再按薪级排 序)。 排序算法只使⽤ < 在项⽬之间⽐较。 虽然定义⼀个 __lt__() ⽅法就⾜以进⾏排 序,但 PEP 8 建议实现所有六个 富⽐较 。 这将有助于避免在与其他排序⼯具(如 max() )使⽤相同的数据时出现错误,这些⼯具依赖于不同的底层⽅法。实现所有六 个⽐较也有助于避免混合类型⽐较的混乱,因为混合类型⽐较可以调⽤反射到 __gt__() 的⽅法。 有关排序示例和简要排序教程,请参阅 排序的技术 。 @staticmethod 将⽅法转换为静态⽅法。 静态⽅法不会接收隐式的第⼀个参数。要声明⼀个静态⽅法,请使⽤此语法 class C: @staticmethod def f(arg1, arg2, argN):... @staticmethod 这样的形式称为函数的 decorator -- 详情参阅 函数定义。 静态⽅式既可以在类上调⽤ (如 C.f() ),也可以在实例上调⽤ (如 C().f() )。 此 外,静态⽅法 descriptor 也属于可调⽤对象,因⽽它们可以在类定义中使⽤ (如 f() )。 Python 的静态⽅法与 Java 或 C++ 类似。另请参阅 classmethod() ,可⽤于创建 另⼀种类构造函数。 像所有装饰器⼀样,也可以像常规函数⼀样调⽤ staticmethod ,并对其结果执⾏某 些操作。⽐如某些情况下需要从类主体引⽤函数并且您希望避免⾃动转换为实例⽅法。 对于这些情况,请使⽤此语法: def regular_function():... https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 35/43 页 : : class C: method = staticmethod(regular_function) 想了解更多有关静态⽅法的信息,请参阅 标准类型层级结构 。 在 3.10 版本发⽣变更: 静态⽅法继承了⽅法的多个属性( __module__ 、 __name__ 、 __qualname__ 、 __doc__ 和 __annotations__ ),还拥有 ⼀个新的 __wrapped__ 属性,并且现在还可以作为普通函数进⾏调⽤。 class str(object='') class str(object=b'', encoding='utf-8', errors='strict') 返回⼀个 str 版本的 object 。有关详细信息,请参阅 str() 。 str 是内置字符串 class 。更多关于字符串的信息查看 ⽂本序列类型 --- str。 sum(iterable, /, start=0) 从 start 开始⾃左向右对 iterable 的项求和并返回总计值。 iterable 的项通常为数字, ⽽ start 值则不允许为字符串。 对于某些⽤例,存在 sum() 的更好替代。 拼接字符串序列的更好、更快的⽅式是调⽤ ''.join(sequence) 。 要以扩展的精度执⾏浮点数值的求和,请参阅 math.fsum() 。 要拼接⼀系列可迭代对象,请考虑使⽤ itertools.chain() 。 在 3.8 版本发⽣变更: start 形参可⽤关键字参数形式来指定。 在 3.12 版本发⽣变更: Summation of floats switched to an algorithm that gives higher accuracy on most builds. class super class super(type, object_or_type=None) 返回⼀个代理对象,它会将⽅法调⽤委托给 type 的⽗类或兄弟类。 这对于访问已在类 中被重写的继承⽅法很有⽤。 object_or_type 确定要⽤于搜索的 method resolution order。 搜索会从 type 之后的 类开始。 举例来说,如果 object_or_type 的 __mro__ 为 D -> B -> C -> A -> object https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 36/43 页 : : 并且 type 的值为 B ,则 super() 将会搜索 C -> A -> object 。 The __mro__ attribute of the class corresponding to object_or_type lists the method resolution search order used by both getattr() and super(). The attribute is dynamic and can change whenever the inheritance hierarchy is updated. 如果省略第⼆个参数,则返回的超类对象是未绑定的。 如果第⼆个参数为⼀个对象, 则 isinstance(obj, type) 必须为真值。 如果第⼆个参数为⼀个类型,则 issubclass(type2, type) 必须为真值(这适⽤于类⽅法)。 super 有两个典型⽤例。 在具有单继承的类层级结构中,super 可⽤来引⽤⽗类⽽不 必显式地指定它们的名称,从⽽令代码更易维护。 这种⽤法与其他编程语⾔中 super 的⽤法⾮常相似。 第⼆个⽤例是在动态执⾏环境中⽀持协作多重继承。 此⽤例为 Python 所独有⽽不存 在于静态编码语⾔或仅⽀持单继承的语⾔当中。 这使⽤实现“菱形图”成为可能,即有 多个基类实现相同的⽅法。 好的设计强制要求这样的⽅法在每个情况下都具有相同的 调⽤签名(因为调⽤顺序是在运⾏时确定的,也因为这个顺序要适应类层级结构的更 改,还因为这个顺序可能包括在运⾏时之前未知的兄弟类)。 对于以上两个⽤例,典型的超类调⽤看起来是这样的: class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg) 除了⽅法查找之外, super() 也可⽤于属性查找。 ⼀个可能的应⽤场合是在上级或同 级类中调⽤ 描述器。 请注意 super() 被实现为为显式的带点号属性查找的绑定过程的组成部分,例如 super().__getitem__(name) 。 它做到这⼀点是通过实现⾃⼰的 __getattribute__() ⽅法以便能够按⽀持协作多重继承的可预测的顺序来搜索 类。 相应地, super() 在像 super()[name] 这样使⽤语句或运算符进⾏隐式查找 时则是未定义的。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 37/43 页 : : 还要注意的是,除了零个参数的形式以外, super() 并不限于在⽅法内部使⽤。 两个 参数的形式明确指定参数并进⾏相应的引⽤。 零个参数的形式仅适⽤于类定义内部, 因为编译器需要填⼊必要的细节以正确地检索到被定义的类,还需要让普通⽅法访问当 前实例。 对于有关如何使⽤ super() 来如何设计协作类的实⽤建议,请参阅 使⽤ super() 的 指南。 class tuple class tuple(iterable) 虽然被称为函数,但 tuple 实际上是⼀个不可变的序列类型,参⻅在 元组 与 序列类 型 --- list, tuple, range 中的⽂档说明。 class type(object) class type(name, bases, dict, **kwds) 传⼊⼀个参数时,返回 object 的类型。 返回值是⼀个 type 对象,通常与 object.__class__ 所返回的对象相同。 推荐使⽤ isinstance() 内置函数来检测对象的类型,因为它会考虑⼦类的情况。 传⼊三个参数时,返回⼀个新的 type 对象。 这在本质上是 class 语句的⼀种动态形 式,name 字符串即类名并会成为 __name__ 属性;bases 元组包含基类并会成为 __bases__ 属性;如果为空则会添加所有类的终极基类 object 。 dict 字典包含类 主体的属性和⽅法定义;它在成为 __dict__ 属性之前可能会被拷⻉或包装。 下⾯两 条语句会创建相同的 type 对象: >>> class X: >>>... a = 1... >>> X = type('X', (), dict(a=1)) 另请参阅 类型对象。 提供给三参数形式的关键字参数会被传递给适当的元类机制 (通常为 __init_subclass__() ),相当于类定义中关键字 (除了 metaclass) 的⾏为⽅式。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 38/43 页 : : 另请参阅 ⾃定义类创建。 在 3.6 版本发⽣变更: type 的⼦类如果未重载 type.__new__ ,将不再能使⽤ ⼀个参数的形式来获取对象的类型。 vars() vars(object) 返回模块、类、实例或任何其它具有 __dict__ 属性的对象的 __dict__ 属性。 模块和实例这样的对象具有可更新的 __dict__ 属性;但是,其它对象的 __dict__ 属性可能会设为限制写⼊(例如,类会使⽤ types.MappingProxyType 来防⽌直接 更新字典)。 不带参数时, vars() 的⾏为类似 locals() 。 请注意,locals 字典仅对于读取起作 ⽤,因为对 locals 字典的更新会被忽略。 如果指定了⼀个对象但它没有 __dict__ 属性(例如,当它所属的类定义了 __slots__ 属性时)则会引发 TypeError 异常。 zip(*iterables, strict=False) 在多个迭代器上并⾏迭代,从每个迭代器返回⼀个数据项组成元组。 示例: >>> >>> nice']): for item in zip([1, 2, 3], ['sugar', 'spice', 'everything... print(item)... (1, 'sugar') (2, 'spice') (3, 'everything nice') 更正式的说法: zip() 返回元组的迭代器,其中第 i 个元组包含的是每个参数迭代器 的第 i 个元素。 不妨换⼀种⽅式认识 zip() :它会把⾏变成列,把列变成⾏。这类似于 矩阵转置 。 zip() 是延迟执⾏的:直⾄迭代时才会对元素进⾏处理,⽐如 for 循环或放⼊ list https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 39/43 页 : : 中。 值得考虑的是,传给 zip() 的可迭代对象可能⻓度不同;有时是有意为之,有时是因 为准备这些对象的代码存在错误。Python 提供了三种不同的处理⽅案: 默认情况下, zip() 在最短的迭代完成后停⽌。较⻓可迭代对象中的剩余项将被 忽略,结果会裁切⾄最短可迭代对象的⻓度: >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'])) >>> [(0, 'fee'), (1, 'fi'), (2, 'fo')] 通常 zip() ⽤于可迭代对象等⻓的情况下。这时建议⽤ strict=True 的选 项。输出与普通的 zip() 相同:。 >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) >>> [('a', 1), ('b', 2), ('c', 3)] 与默认⾏为不同,如果⼀个可迭代对象在其他⼏个之前被耗尽则会引发 ValueError : >>> strict= >>> for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'],... print(item)... (0, 'fee') (1, 'fi') (2, 'fo') Traceback (most recent call last):... ValueError: zip() argument 2 is longer than argument 1 如果未指定 strict=True 参数,所有导致可迭代对象⻓度不同的错误都会被抑 制,这可能会在程序的其他地⽅表现为难以发现的错误。 为了让所有的可迭代对象具有相同的⻓度,⻓度较短的可⽤常量进⾏填充。这可 由 itertools.zip_longest() 来完成。 极端例⼦是只有⼀个可迭代对象参数, zip() 会返回⼀个⼀元组的迭代器。如果未给 出参数,则返回⼀个空的迭代器。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 40/43 页 : : ⼩技巧: 可确保迭代器的求值顺序是从左到右的。这样就能⽤ zip(*[iter(s)]*n, strict=True) 将数据列表按⻓度 n 进⾏分组。这将重复 相同 的迭代器 n 次,输出的每个元组都包含 n 次调⽤迭代器的结果。这样做的效果是把输⼊拆分 为⻓度为 n 的块。 zip() 与 * 运算符相结合可以⽤来拆解⼀个列表: >>> x = [1, 2, 3] >>> >>> y = [4, 5, 6] >>> list(zip(x, y)) [(1, 4), (2, 5), (3, 6)] >>> x2, y2 = zip(*zip(x, y)) >>> x == list(x2) and y == list(y2) True 在 3.10 版本发⽣变更: 增加了 strict 参数。 __import__(name, globals=None, locals=None, fromlist=(), level=0) 备注: 与 importlib.import_module() 不同,这是⼀个⽇常 Python 编程中不 需要⽤到的⾼级函数。 此函数会由 import 语句发起调⽤。 它可以被替换 (通过导⼊ builtins 模块并赋值 给 builtins.__import__ ) 以便修改 import 语句的语义,但是 强烈 不建议这样 做,因为使⽤导⼊钩⼦ (参⻅ PEP 302) 通常更容易实现同样的⽬标,并且不会导致代 码问题,因为许多代码都会假定所⽤的是默认实现。 同样也不建议直接使⽤ __import__() ⽽应该⽤ importlib.import_module() 。 本函数会导⼊模块 name,利⽤ globals 和 locals 来决定如何在包的上下⽂中解释该 名称。fromlist 给出了应从 name 模块中导⼊的对象或⼦模块的名称。标准的实现代码 完全不会⽤到 locals 参数,只⽤到了 globals ⽤于确定 import 语句所在的包上下 ⽂。 level 指定是使⽤绝对还是相对导⼊。 0 (默认值) 意味着仅执⾏绝对导⼊。 level 为正 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 41/43 页 : : 数值表示相对于模块调⽤ __import__() 的⽬录,将要搜索的⽗⽬录层数 (详情参⻅ PEP 328)。 当 name 变量的形式为 package.module 时,通常将会返回最⾼层级的包(第⼀个 点号之前的名称),⽽ 不是 以 name 命名的模块。 但是,当给出了⾮空的 fromlist 参数时,则将返回以 name 命名的模块。 例如,语句 import spam 的结果将为与以下代码作⽤相同的字节码: spam = __import__('spam', globals(), locals(), [], 0) 语句 import spam.ham 的结果将为以下调⽤: spam = __import__('spam.ham', globals(), locals(), [], 0) 请注意在这⾥ __import__() 是如何返回顶层模块的,因为这是通过 import 语句 被绑定到特定名称的对象。 另⼀⽅⾯,语句 from spam.ham import eggs, sausage as saus 的结果将 为 _temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage' eggs = _temp.eggs saus = _temp.sausage 在这⾥, spam.ham 模块会由 __import__() 返回。 要导⼊的对象将从此对象中提 取并赋值给它们对应的名称。 如果您只想按名称导⼊模块(可能在包中),请使⽤ importlib.import_module() 在 3.3 版本发⽣变更: level 的值不再⽀持负数(默认值也修改为0)。 在 3.9 版本发⽣变更: 当使⽤了命令⾏参数 -E 或 -I 时,环境变量 PYTHONCASEOK 现在将被忽略。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 42/43 页 : : 备注 解析器只接受 Unix ⻛格的⾏结束符。如果您从⽂件中读取代码,请确保⽤换⾏符转换 模式转换 Windows 或 Mac ⻛格的换⾏符。 https://docs.python.org/zh-cn/3/library/functions.html 9/13/24 下午 9 44 码 43/43 页 : :

Use Quizgecko on...
Browser
Browser