1. compile() 函数
用途:将一个字符串源代码编译为字节码对象,这样可以直接被Python解释器执行,或者通过exec()或eval()函数来执行。
参数:
source:一个字符串或AST(抽象语法树)对象,表示要编译的源代码。
filename:源代码文件名(字符串),用于错误和警告信息中。如果不需要,可以传递一个空字符串。
mode:指定编译模式,它是一个字符串。可以是'exec'(编译为可执行代码),'eval'(编译为单个表达式),或'single'(编译为单个交互式语句)。
flags:可选参数,用于指定编译器的标志。默认值为0。
dont_inherit:如果为True,则不会继承调用者的未来特性标志。默认值为False。
optimize:优化级别。默认为-1,表示使用解释器的默认优化级别。
返回值:返回一个代码对象(code object),可以使用exec()或eval()函数来执行。
示例:
python"># 编译并执行一段代码
code = compile('print("Hello, World!")', '<string>', 'exec')
exec(code)
# 编译并求值一个表达式
expr_code = compile('3 + 5', '<string>', 'eval')
result = eval(expr_code)
print(result) # 输出: 8
2. exec() 函数
用途:执行储存在字符串或文件中的Python代码。
参数:
object:可以是一个字符串,也可以是一个代码对象。
globals:一个字典,用于指定全局命名空间。如果未提供,则将使用当前全局命名空间。
locals:一个字典,用于指定局部命名空间。如果未提供,则将使用当前局部命名空间。
示例:
python"># 执行字符串中的Python代码
code = """
def greet():
print("Hello, world!")
greet()
"""
exec(code)
执行文件中的Python代码
python"># 假设有一个名为example.py的文件,其内容如下:
# def greet():
# print("Hello, world!")
# greet()
# 可以使用exec()函数执行该文件中的代码:
with open('example.py', 'r') as file:
code = file.read()
exec(code)
3. complex() 函数
用途:创建一个复数对象,可以接受一个或两个参数,分别表示实部和虚部。
参数:
real:复数的实部,可以是整数、浮点数或字符串。
imag:复数的虚部,可以是整数、浮点数或字符串。如果只传入一个参数,则该参数将被视为复数的实部,虚部默认为0。
返回值:返回一个表示复数的复数对象。
示例:
python"># 创建复数对象
num1 = complex(3, 4) # (3+4j)
num2 = complex(2.5, -1) # (2.5-1j)
num3 = complex("1+2j") # (1+2j)
# 复数运算
sum_num = num1 + num2 # (5.5+3j)
diff_num = num1 - num2 # (0.5+5j)
prod_num = num1 * num2 # (-5+10j)
4. eval() 函数
用途:将字符串当作有效的Python表达式进行求值并返回结果。
参数:
expression:一个字符串,表示要求值的表达式或代码。
globals:一个可选的全局命名空间字典。
locals:一个可选的局部命名空间字典。
返回值:返回表达式的求值结果。
示例:
python"># 求值表达式
result = eval("2 + 3")
print(result) # 输出: 5
result = eval("3 + 5 * 2")
print(result) # 输出:13
# 字符串转换为数据类型
num = eval("42")
print(type(num)) # 输出: <class 'int'>
string = eval("'Hello, World!'")
print(type(string)) # 输出: <class 'str'>