python基础篇:讲讲python的内置函数一

上一篇我们将了什么是函数,函数的定义,函数的调用等。这篇我们讲讲python的内置函数。

IO操作

python基础篇:讲讲python的内置函数一

 

print(*objects, sep=' ', end=' ', file=sys.stdout, flush=False)

打印objects到文本流file,以分隔符sep分隔多个对象,并以end结尾。

语法相关

breakpoint(*args, **kwargs)

此函数会在调用时将你陷入调试器中。具体来说,它调用 sys.breakpointhook(),直接传递 args 和 kws 。默认情况下, sys.breakpointhook() 调用 pdb.set_trace()且没有参数。在这种情况下,它纯粹是一个便利函数,因此您不必显式导入 pdb 且键入尽可能少的代码即可进入调试器。但是, sys.breakpointhook() 可以设置为其他一些函数并被 breakpoint() 自动调用,以允许进入你想用的调试器。

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

将 source 编译成代码或 AST 对象。代码对象可以被 exec() 或 eval() 执行。source 可以是常规的字符串、字节字符串,或者 AST 对象。

ascii(object)

返回一个只用ASCII码表示的对象。类似函数repr()返回一个对象的可打印字符串表示,但是会把其中非ASCII的字符用\x, \u, U进行转义。比如:

In [23]: ascii([1,2,3])
Out[23]: '[1, 2, 3]'
In [24]: ascii('编程')
Out[24]: "'\编\程'"
In [25]: ascii('a
b')
Out[25]: "'a\nb'"

python基础篇:讲讲python的内置函数一

 

repr(object)

返回包含对象的可打印表示的字符串。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时会产生具有相同值的对象,否则表示形式是一个用尖括号括起来的字符串,它包含对象类型的名称附加信息通常包括对象的名称和地址。 类可以通过定义repr()方法来控制此函数为其实例返回的内容。

In [54]: repr({'a': 1, 'b':2, 'c':3})
Out[54]: "{'a': 1, 'b': 2, 'c': 3}"
In [55]: s = repr({'a': 1, 'b':2, 'c':3})
In [56]: eval(s)
Out[56]: {'a': 1, 'b': 2, 'c': 3}

eval(expression, globals=None, locals=None)

实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映射对象。

这个函数也可以用来执行任何代码对象(如 compile() 创建的)。这种情况下,参数是代码对象,而不是字符串。如果编译该对象时的 mode 实参是 ‘exec’ 那么 eval() 返回值为 None 。

In [17]: a = 2
In [18]: eval('a+2')
Out[18]: 4
In [19]: eval('3*3')
Out[19]: 9
In [20]: d = ascii({'a':1, 'b':2})
In [21]: d
Out[21]: "{'a': 1, 'b': 2}"
In [22]: eval(d)
Out[22]: {'a': 1, 'b': 2}

提示: exec() 函数支持动态执行语句。 globals() 和 locals() 函数各自返回当前的全局和本地字典,因此您可以将它们传递给 eval() 或 exec() 来使用。

input([prompt])

如果存在 prompt 实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。当读取到 EOF 时,则触发 EOFError。例如:

In [25]: s = input('>>')
>>猿人学python
In [26]: s
Out[26]: '猿人学python'

如果加载了 readline 模块,input() 将使用它来提供复杂的行编辑和历史记录功能。

python基础篇:讲讲python的内置函数一

 

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。)可用的模式有:

字符 意义

‘r’ 读取(默认)

‘w’ 写入,并先截断文件

‘x’ 排它性创建,如果文件已存在则失败

‘a’ 写入,如果文件存在则在末尾追加

‘b’ 二进制模式

‘t’ 文本模式(默认)

‘+’ 更新磁盘文件(读取并写入)

‘U’ universal newlines 模式(已弃用)

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

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

注解 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,”,’ ’,’ ’ 和 ‘ ’。它的工作原理:

从流中读取输入时,如果 newline 为 None,则启用通用换行模式。输入中的行可以以 ‘ ’,’ ’ 或 ‘ ’ 结尾,这些行被翻译成 ‘ ’ 在返回呼叫者之前。如果它是 ”,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。

将输出写入流时,如果 newline 为 None,则写入的任何 ‘ ’ 字符都将转换为系统默认行分隔符 os.linesep。如果 newline 是 ” 或 ‘ ’,则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 ‘ ’ 字符将被转换为给定的字符串。

如果 closefd 是 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出文件名则 closefd 必须为 True (默认值),否则将引发错误。

可以通过传递可调用的 opener 来使用自定义开启器。然后通过使用参数( file,flags )调用 opener 获得文件对象的基础文件描述符。 opener 必须返回一个打开的文件描述符(使用 os.open as opener 时与传递 None 的效果相同)