python内置函数 C
Python 解释器内置了很多函数和类型,任何时候都能使用。
C
| 名称 | 描述 | 
|---|---|
| callable | 检查一个对象是否是可调用的。 | 
| chr | 将整数(表示Unicode码点)转换为对应的字符。 | 
| classmethod | 将一个方法转变为类方法。 | 
| compile | 将源代码字符串编译为字节码对象。 | 
| complex | 创建复数。 | 
callable(object)
如果 object 参数是可调用的则返回 True,否则返回 False。 如果返回 True,调用仍可能失败,但如果返回 False,则调用 object 肯定不会成功。 请注意类是可调用的(调用类将返回一个新的实例);如果实例所属的类有 __call__() 方法则它就是可调用的。
在 3.2 版本加入: 这个函数一开始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。
# 定义一个普通的函数  
def my_function():  pass  # 检查函数是否可调用  
print(callable(my_function))  # 输出: True  # 定义一个类  
class MyClass:  def __call__(self):  print("Instance is called!")  # 创建类的实例  
my_instance = MyClass()  # 检查类的实例是否可调用  
print(callable(my_instance))  # 输出: True  # 创建一个普通的对象(没有 __call__ 方法)  
my_object = object()  # 检查对象是否可调用  
print(callable(my_object))  # 输出: False  # 检查内置函数是否可调用  
print(callable(print))  # 输出: True  # 检查字符串是否可调用  
print(callable("Hello"))  # 输出: False
chr(i)
返回 Unicode 码位为整数 i 的字符的字符串格式。例如,chr(97) 返回字符串 'a',chr(8364) 返回字符串 '€'。这是 ord() 的逆函数。
实参的合法范围是 0 到 1,114,111(16 进制表示是 0x10FFFF)。如果 i 超过这个范围,会触发 ValueError 异常。
# 将Unicode码点65转换为字符'A'
print(chr(65))  # 输出: 'A'# 将Unicode码点97转换为字符'a'
print(chr(97))  # 输出: 'a'# 将Unicode码点32转换为空格字符
print(chr(32))  # 输出: ' '# 也可以用于非ASCII字符
# 将Unicode码点20013转换为字符'中'(在中文中代表'中')
print(chr(20013))  # 输出: '中'
@classmethod
把一个方法封装成类方法。
类方法隐含的第一个参数就是类,就像实例方法接收实例作为参数一样。要声明一个类方法,按惯例请使用以下方案:
class C:@classmethoddef f(cls, arg1, arg2): ...
@classmethod 这样的形式称为函数的 decorator – 详情参阅 函数定义。
类方法的调用可以在类上进行 (例如 C.f()) 也可以在实例上进行 (例如 C().f())。 其所属类以外的类实例会被忽略。 如果类方法在其所属类的派生类上调用,则该派生类对象会被作为隐含的第一个参数被传入。
类方法与 C++ 或 Java 中的静态方法不同。 如果你需要后者,请参阅本节中的 staticmethod()。 有关类方法的更多信息,请参阅 标准类型层级结构。
在 3.9 版本发生变更: 类方法现在可以包装其他 描述器 例如 property()。
在 3.10 版本发生变更: 类方法现在继承了方法的属性( __module__、 __name__、 __qualname__、 __doc__ 和 __annotations__),并拥有一个新的 __wrapped__ 属性。
在 3.11 版本发生变更: 类方法不再可以包装其他 descriptors 例如 property()。
class MyClass:  class_variable = "I am a class variable"  @classmethod  def print_class_variable(cls):  print(cls.class_variable)  @classmethod  def create_instance(cls, value):  return cls(value)  def __init__(self, value):  self.instance_variable = value  def print_instance_variable(self):  print(self.instance_variable)  # 使用类方法打印类变量  
MyClass.print_class_variable()  # 输出: I am a class variable  # 使用类方法创建类的实例  
instance = MyClass.create_instance(42)  # 使用实例方法打印实例变量  
instance.print_instance_variable()  # 输出: 42
类方法的一个常见用途是工厂方法,用于创建类的不同实例或返回特定类型的对象。它们也常用于实现单例模式,确保一个类只有一个实例存在。
注意,尽管类方法可以在没有创建实例的情况下被调用,但它们仍然是通过类本身来调用的,而不是通过单独的函数。这意味着它们可以访问和修改类的状态,但不能直接访问实例的状态(除非通过实例对象本身)。
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
compile()是一个内置函数,用于将源代码字符串编译为字节码对象。这个字节码对象可以被Python虚拟机执行。compile()函数通常用于动态地创建和执行代码,或者用于实现更高级的编程模式,如元编程。
参数说明:
- source:一个字符串或者AST(抽象语法树)对象,代表要编译的源代码。
- filename:源代码的文件名,如果源代码不是从文件读取,可以是一个任意的字符串,通常使用- <string>或者- <module>。
- mode:指定编译代码的种类,可以是以下字符串之一:- 'exec'(表示一个模块、可执行语句或交互式命令的序列)、- 'eval'(表示一个单独的表达式)或- 'single'(表示单个交互式语句)。
- flags:可选参数,用于修改编译器标志。
- dont_inherit:如果为True,编译的代码不会继承当前的编译环境标志。
- optimize:指定编译器的优化级别。
将 source 编译成代码或 AST 对象。代码对象可以被 exec() 或 eval() 执行。source 可以是常规的字符串、字节字符串,或者 AST 对象。参见 ast 模块的文档了解如何使用 AST 对象。
filename 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经常会使用 '<string>')。
mode 实参指定了编译代码必须用的模式。如果 source 是语句序列,可以是 'exec';如果是单一表达式,可以是 'eval';如果是单个交互式语句,可以是 'single'。(在最后一种情况下,如果表达式执行结果不是 None 将会被打印出来。)
可选参数 flags 和 dont_inherit 控制应当激活哪个 编译器选项 以及应当允许哪个 future 特性。 如果两者都未提供 (或都为零) 则代码会应用与调用 compile() 的代码相同的旗标来编译。 如果给出了 flags 参数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指定的编译器选项和 future 语句。 如果 dont_inherit 为非零整数,则只使用 flags 参数 – 外围代码中的旗标 (future 特性和编译器选项) 会被忽略。
编译器选项和 future 语句是由比特位来指明的。 比特位可以通过一起按位 OR 来指明多个选项。 指明特定 future 特性所需的比特位可以在 __future__ 模块的 _Feature 实例的 compiler_flag 属性中找到。 编译器旗标 可以在 ast 模块中查找带有 PyCF_ 前缀的名称。
optimize 实参指定编译器的优化级别;默认值 -1 选择与解释器的 -O 选项相同的优化级别。显式级别为 0 (没有优化;__debug__ 为真)、1 (断言被删除, __debug__ 为假)或 2 (文档字符串也被删除)。
如果编译的源码不合法,此函数会触发 SyntaxError 异常;如果源码包含 null 字节,则会触发 ValueError 异常。
如果您想分析 Python 代码的 AST 表示,请参阅 ast.parse()。
引发一个 审计事件 compile 附带参数 source, filename。
备注:在 'single' 或 'eval' 模式编译多行代码字符串时,输入必须以至少一个换行符结尾。 这使 code 模块更容易检测语句的完整性。
警告:在将足够大或者足够复杂的字符串编译成 AST 对象时,Python 解释器有可能因为 Python AST 编译器的栈深度限制而崩溃。
在 3.2 版本发生变更: Windows 和 Mac 的换行符均可使用。而且在 'exec' 模式下的输入不必再以换行符结尾了。另增加了 optimize 参数。
在 3.5 版本发生变更: 之前 source 中包含 null 字节的话会触发 TypeError 异常。
在 3.8 版本加入: ast.PyCF_ALLOW_TOP_LEVEL_AWAIT 现在可在旗标中传入以启用对最高层级 await, async for 和 async with 的支持。
# 编译一个简单的表达式  
expr_code = compile('2 + 2', '<string>', 'eval')
result = eval(expr_code)
print(result)  # 输出: 4  # 编译一段可执行代码  
exec_code = compile('''  
def hello(name):  print(f'Hello, {name}!')  
hello('world')  
''', '<string>', 'exec')
exec(exec_code)  # 输出: Hello, world!  # 编译一个交互式的代码块  
single_code = compile('name = "Alice"', '<string>', 'single')
exec(single_code)
print(name)  # 输出: Alice
compile()函数只是将源代码编译为字节码对象,并不会执行它。要执行编译后的代码,你需要使用exec()函数(对于'exec'模式)或eval()函数(对于'eval'模式)。
使用compile()函数时要特别小心,因为它允许执行动态生成的代码,这可能带来安全风险,特别是当代码来源不可控时。确保不要执行来自不受信任源的编译代码。
complex(real=0, imag=0)
class complex(real=0, imag=0)
class complex(string)
返回值为 real + *imag**1j 的复数,或将字符串或数字转换为复数。如果第一个形参是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。第二个形参不能是字符串。每个实参都可以是任意的数值类型(包括复数)。如果省略了 imag,则默认值为零,构造函数会像 int 和 float 一样进行数值转换。如果两个实参都省略,则返回 0j。
对于一个普通 Python 对象 x,complex(x) 会委托给 x.__complex__()。 如果 __complex__() 未定义则将回退至 __float__()。 如果 __float__() 未定义则将回退至 __index__()。
备注:当从字符串转换时,字符串在 + 或 - 的周围必须不能有空格。例如 complex('1+2j') 是合法的,但 complex('1 + 2j') 会触发 ValueError 异常。
数字类型 — int, float, complex 描述了复数类型。
在 3.6 版本发生变更: 您可以使用下划线将代码文字中的数字进行分组。
在 3.8 版本发生变更: 如果 __complex__() 和 __float__() 均未定义则回退至 __index__()。
complex()是一个内置函数,用于创建复数。复数是包含实部和虚部的数字,通常用于表示在二维平面上的点,或在某些数学和科学计算中。
complex()函数可以接受多种形式的参数来创建复数:
-  两个参数,分别表示复数的实部和虚部: c = complex(real, imag)其中 real是实部,imag是虚部。
-  一个字符串,表示复数的形式(如 '3+4j'):c = complex('3+4j')这里的 'j'表示虚数单位,相当于数学中的i。# 使用两个参数创建复数 c1 = complex(3, 4) print(c1) # 输出: (3+4j)# 使用字符串创建复数 c2 = complex('2-3j') print(c2) # 输出: (2-3j)# 访问复数的实部和虚部 real_part = c1.real imag_part = c1.imag print(real_part) # 输出: 3.0 print(imag_part) # 输出: 4.0# 复数的运算 c3 = c1 + c2 # 加法 c4 = c1 * c2 # 乘法 print(c3) # 输出: (5+1j) print(c4) # 输出: (18-1j)在复数的表示中, j或J被用作虚数单位的标识。当你使用complex()函数时,可以传递一个包含这两个字符的字符串来创建复数。如果传递的字符串格式不正确(例如,没有包含j或J),则会引发ValueError。
参考:内置函数 — Python 3.12.2 文档