Python标准库---四、内置函数(L-M-N-O)

上一篇文章: Python标准库---三、内置函数(G-H-I-J-K)
下一篇文章: Python标准库---五、内置函数(P-K-R)

内置函数:

clipboard.png

38. len(s)

返回对象的长度(元素个数)。实参能够是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。

39. class list([iterable])

除了是函数,list 也是可变序列类型,详情请参阅 列表 和 序列类型 --- list, tuple, range。

40. locals()

更新并返回表示当前本地符号表的字典。 在函数代码块但不是类代码块中调用 locals() 时将返回自由变量。 请注意在模块层级上,locals() 和 globals() 是同一个字典。

注解 不要更改此字典的内容;更改不会影响解释器使用的局部变量或自由变量的值。segmentfault

41. map(function, iterable, ...)

产生一个将 function 应用于迭代器中全部元素并返回结果的迭代器。若是传递了额外的 iterable 实参,function 必须接受相同个数的实参,并使用全部迭代器中并行获取的元素。当有多个迭代器时,最短的迭代器耗尽则整个迭代结束。若是函数的输入已是元组实参,请参阅 itertools.starmap()。

42. max(iterable, *[, key, default])

max(arg1, arg2, *args[, key])app

返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。

若是只提供了一个位置参数,它必须是非空 iterable,返回可迭代对象中最大的元素;若是提供了两个及以上的位置参数,则返回最大的位置参数。dom

有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。若是可迭代对象为空,而且没有给 default ,则会触发 ValueError。函数

若是有多个最大元素,则此函数将返回第一个找到的。这和其余稳定排序工具如 sorted(iterable, key=keyfunc, reverse=True)[0] 和 heapq.nlargest(1, iterable, key=keyfunc) 保持一致。工具

3.4 新版功能: keyword-only 实参 default 。编码

43. memoryview(obj)

返回由给定实参建立的“内存视图”对象。有关详细信息,请参阅 内存视图。

44. min(iterable, *[, key, default])

min(arg1, arg2, *args[, key])spa

返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。

若是只提供了一个位置参数,它必须是 iterable,返回可迭代对象中最小的元素;若是提供了两个及以上的位置参数,则返回最小的位置参数。操作系统

有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给 list.sort() 的。default 实参是当可迭代对象为空时返回的值。若是可迭代对象为空,而且没有给 default ,则会触发 ValueError。翻译

若是有多个最小元素,则此函数将返回第一个找到的。这和其余稳定排序工具如 sorted(iterable, key=keyfunc)[0] 和 heapq.nsmallest(1, iterable, key=keyfunc) 保持一致。
3.4 新版功能: keyword-only 实参 default 。指针

45. next(iterator[, default])

经过调用 iterator 的 __next__() 方法获取下一个元素。若是迭代器耗尽,则返回给定的 default,若是没有默认值则触发 StopIteration。

46. class object

返回一个没有特征的新对象。object 是全部类的基类。它具备全部 Python 类实例的通用方法。这个函数不接受任何实参。

注解 因为 object 没有 __dict__,所以没法将任意属性赋给 object 的实例。

47. 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() 获取更多信息。

48. 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 是一个可选字符串,用于指定打开文件的模式。默认值是 'r' ,这意味着它以文本模式打开并读取。其余常见模式有:写入 'w' (截断已经存在的文件);排它性建立 'x' ;追加写 'a' (在 一些 Unix 系统上,不管当前的文件指针在什么位置,全部 写入都会追加到文件末尾)。在文本模式,若是 encoding 没有指定,则根据平台来决定使用的编码:使用 locale.getpreferredencoding(False) 来获取本地编码。(要读取和写入原始字节,请使用二进制模式并不要指定 encoding。)可用的模式有:

clipboard.png

默认的模式是 'r' (打开并读取文本,同 'rt' )。对于二进制写入, 'w+b' 模式打开并把文件截断成 0 字节; 'r+b' 则不会截断。

正如在 概述 中提到的,Python区分二进制和文本I/O。以二进制模式打开的文件(包括 mode 参数中的 'b' )返回的内容为 bytes对象,不进行任何解码。在文本模式下(默认状况下,或者在 *mode* 参数中包含 't'` )时,文件内容返回为 str ,首先使用指定的 encoding (若是给定)或者使用平台默认的的字节编码解码。

此外还容许使用一个模式字符 'U',该字符已再也不具备任何效果,并被视为已弃用。 以前它会在文本模式中启用 universal newlines,这在 Python 3.0 中成为默认行为。 请参阅 newline 形参的文档了解更多细节。

注解 Python不依赖于底层操做系统的文本文件概念;全部处理都由Python自己完成,所以与平台无关。
buffering 是一个可选的整数,用于设置缓冲策略。传递0以切换缓冲关闭(仅容许在二进制模式下),1选择行缓冲(仅在文本模式下可用),而且>1的整数以指示固定大小的块缓冲区的大小(以字节为单位)。若是没有给出 buffering 参数,则默认缓冲策略的工做方式以下:

  • 二进制文件以固定大小的块进行缓冲;使用启发式方法选择缓冲区的大小,尝试肯定底层设备的“块大小”或使用 io.DEFAULT_BUFFER_SIZE。在许多系统上,缓冲区的长度一般为4096或8192字节。
  • “交互式”文本文件( isatty() 返回 True 的文件)使用行缓冲。其余文本文件使用上述策略用于二进制文件。
encoding 是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码是依赖于平台的(不 管 locale.getpreferredencoding() 返回何值),但可使用任何Python支持的 text encoding 。有关支持的编码列表,请参阅 codecs 模块。

errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可使用各类标准错误处理程序(列在 Error Handlers ),可是使用 codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括:

  • 若是存在编码错误,'strict' 会引起 ValueError 异常。 默认值 None 具备相同的效果。
  • 'ignore' 忽略错误。请注意,忽略编码错误可能会致使数据丢失。
  • 'replace' 会将替换标记(例如 '?' )插入有错误数据的地方。
  • 'surrogateescape' 将表示任何不正确的字节做为Unicode专用区中的代码点,范围从U+DC80到U+DCFF。当在写入数据时使用 surrogateescape 错误处理程序时,这些私有代码点将被转回到相同的字节中。这对于处理未知编码的文件颇有用。
  • 只有在写入文件时才支持 'xmlcharrefreplace'。编码不支持的字符将替换为相应的XML字符引用 nnn;。
  • 'backslashreplace' 用Python的反向转义序列替换格式错误的数据。
  • 'namereplace' (也只在编写时支持)用 N{...} 转义序列替换不支持的字符。
  • newline 控制 universal newlines 模式如何生效(它仅适用于文本模式)。它能够是 None,'','n','r' 和 'rn'。它的工做原理:
  • 从流中读取输入时,若是 newline 为 None,则启用通用换行模式。输入中的行能够以 'n','r' 或 'rn' 结尾,这些行被翻译成 'n' 在返回呼叫者以前。若是它是 '',则启用通用换行模式,但行结尾将返回给调用者未翻译。若是它具备任何其余合法值,则输入行仅由给定字符串终止,而且行结尾将返回给未调用的调用者。
  • 将输出写入流时,若是 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。 当禁用缓冲时,则会返回原始流,即 io.RawIOBase 的一个子类 io.FileIO。

另请参阅文件操做模块,例如 fileinput、io (声明了 open())、os、os.path、tempfile 和 shutil。

在 3.3 版更改:
增长了 opener 形参。

增长了 'x' 模式。

过去触发的 IOError,如今是 OSError 的别名。

若是文件已存在但使用了排它性建立模式( 'x' ),如今会触发 FileExistsError。

在 3.4 版更改:
文件如今禁止继承。

Deprecated since version 3.4, will be removed in version 4.0: 'U' 模式。

在 3.5 版更改:
若是系统调用被中断,但信号处理程序没有触发异常,此函数如今会重试系统调用,而不是触发 InterruptedError 异常(缘由详见 PEP 475)。

增长了 'namereplace' 错误处理接口。

在 3.6 版更改:
增长对实现了 os.PathLike 对象的支持。

在 Windows 上,打开一个控制台缓冲区将返回 io.RawIOBase 的子类,而不是 io.FileIO。

49. ord(c)

对表示单个 Unicode 字符的字符串,返回表明它 Unicode 码点的整数。例如 ord('a') 返回整数 97, ord('€') (欧元符合)返回 8364 。这是 chr() 的逆函数。
上一篇文章: Python标准库---三、内置函数(G-H-I-J-K)
下一篇文章: Python标准库---五、内置函数(P-K-R)
相关文章
相关标签/搜索