python内置函数 O

python内置函数 O

Python 解释器内置了很多函数和类型,任何时候都能使用。

O

名称描述
object返回一个不带特征的新对象。
oct将一个整数转换为八进制(octal)表示形式的字符串。
open打开一个文件,并返回相应的文件对象。
ord返回单个字符的Unicode码点(即整数表示)。
object

class object

object 是所有类的基类,也就是“根类”。当你创建一个新的类并且没有明确地从其他类继承时,它默认会从 object 继承。

返回一个不带特征的新对象。object 是所有类的基类。它带有所有 Python 类实例均通用的方法。本函数不接受任何参数。

备注:由于 object 没有 __dict__,因此无法将任意属性赋给 object 的实例。

class MyClass:  
    pass  
  
print(issubclass(MyClass, object))  # 输出: True
oct(x)

oct() 是一个内置函数,用于将一个整数转换为八进制(octal)表示形式的字符串。八进制是一种基数为8的数制系统,它使用数字0到7来表示数值。

将整数转换为带前缀 “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() 获取更多信息。

oct() 函数只能用于整数。如果你尝试将浮点数或其他非整数类型传递给 oct(),Python 会抛出一个 TypeError 异常。

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

open() 是一个内置函数,用于打开一个文件,并返回相应的文件对象。通过这个文件对象,你可以进行读取、写入、追加等操作。

  • file:要打开的文件名(包含路径,如果文件不在当前工作目录下)。

  • mod:文件打开模式。常见的模式有:

    • 'r':读取模式(默认)。
  • 'w':写入模式,会覆盖已存在的文件。

    • 'a':追加模式,写入的数据会被追加到文件的末尾。
    • 'b':二进制模式(可以与其它模式组合,如 'rb''wb')。
    • '+':表示同时读写文件(可以与 'r''w''a' 组合,如 'r+''w+''a+')。
  • buffering:缓冲策略。

  • encoding:用于指定文件的字符编码,一般使用 'utf-8'

  • errors:指定编码错误的处理方式。

  • newline:控制换行符的行为。

  • closefd:如果文件描述符由 open() 创建,则 closefd 必须为 True(默认)。

  • opener:一个自定义的开启器,必须具有 (filename, flags) -> fd 的签名。

open() 函数会返回一个文件对象,你可以使用文件对象的 read()write()close() 等方法来操作文件。

打开 file 并返回对应的 file object。 如果该文件不能被打开,则引发 OSError。 请参阅 读写文件 获取此函数的更多用法示例。

file 是一个 path-like object,表示将要打开的文件的路径(绝对路径或者相对当前工作目录的路径),也可以是要封装文件对应的整数类型文件描述符。(如果给出的是文件描述符,则当返回的 I/O 对象关闭时它也会关闭,除非将 closefd 设为 False 。)

mode 是一个指明文件打开模式的可选字符串。 它默认为 'r' 表示以文本模式读取。 其他常见模式有表示写入的 'w' (若文件已存在则将其清空),表示独占创建的 'x',以及表示追加写入的 'a' (在 某些 Unix 系统上,这意味着无论当前查找位置在哪里 所有 写入操作都将追加到文件末尾)。 在文本模式下,如果未指定 encoding 则所使用的编码格式将依赖于具体平台: locale.getencoding() 会被调用以获取当前语言区域的编码格式。 (对于读取和写入原始字节数据请使用二进制模式并且不要指定 encoding。) 可用的模式有:

字符含意
'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 参数时,默认的缓冲策略规则如下:

  • 二进制文件以固定大小的块进行缓冲;缓冲区的大小是使用启发方式来尝试确定底层设备的“块大小”并会回退至 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'。 它的工作原理如下:

  • 从流中读取输入时,如果 newlineNone,则启用通用换行模式。输入中的行可以以 '\n''\r''\r\n' 结尾,这些行被翻译成 '\n' 在返回呼叫者之前。如果它是 '',则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
  • 将输出写入流时,如果 newlineNone,则写入的任何 '\n' 字符都将转换为系统默认行分隔符 os.linesep。如果 newline'''\n',则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 '\n' 字符将被转换为给定的字符串。

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

可以通过传递可调用的 opener 来使用自定义开启器。然后通过使用参数( fileflags )调用 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

另请参阅文件操作模块,如 fileinputio (声明了 open())、osos.pathtempfileshutil

引发一个 审计事件 open 附带参数 file, mode, flags

modeflags 参数可以在原始调用的基础上被修改或传递。

在 3.3 版本发生变更:

  • 增加了 opener 形参。
  • 增加了 'x' 模式。
  • 过去触发的 IOError,现在是 OSError 的别名。
  • 如果文件已存在但使用了排它性创建模式( 'x' ),现在会触发 FileExistsError

在 3.4 版本发生变更:

  • 文件现在禁止继承。

在 3.5 版本发生变更:

  • 如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发 InterruptedError 异常 (原因详见 PEP 475)。
  • 增加了 'namereplace' 错误处理接口。

在 3.6 版本发生变更:

在 3.11 版本发生变更: 'U' 模式已被移除。

# 打开一个文件用于读取  
with open('example.txt', 'r') as file:  
    content = file.read()  
    print(content)  
  
# 打开一个文件用于写入,如果文件已存在则会被覆盖  
with open('example.txt', 'w') as file:  
    file.write('Hello, world!')  
  
# 打开一个文件用于追加内容  
with open('example.txt', 'a') as file:  
    file.write('\nThis is appended text.')  
  
# 以二进制模式打开一个文件用于读取  
with open('image.png', 'rb') as file:  
    content = file.read()  
    # 这里可以对二进制数据进行处理,比如保存到数据库或发送到网络  
  
# 打开一个文件用于读写  
with open('example.txt', 'r+') as file:  
    content = file.read()  
    file.seek(0)  # 将文件指针移回文件开头  
    file.write('Modified content.')

如果不使用 with 语句,你需要在操作完文件后显式调用 file.close() 来关闭文件。

ord(c)

ord() 是一个内置函数,用于返回单个字符的Unicode码点(即整数表示)。它接受一个长度为1的字符串作为参数,并返回该字符对应的Unicode码点。

对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。例如 ord('a') 返回整数 97ord('€') (欧元符号)返回 8364 。这是 chr() 的逆函数。

# 获取字符 'A' 的Unicode码点
a_ord = ord('A')
print(a_ord)  # 输出: 65

# 获取字符 '中' 的Unicode码点
zhong_ord = ord('中')
print(zhong_ord)  # 输出: 20013 (取决于具体的编码和Python版本)

# 尝试获取多字符字符串的Unicode码点会抛出TypeError
try:
    multi_char_ord = ord('AB')
except TypeError as e:
    print(e)  # 输出: ord() expected a character, but string of length 2 found

ord() 返回的是字符在当前编码下的Unicode码点。

参考:内置函数 — Python 3.12.2 文档

  • 73
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棠越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值