跳到主要内容

作用域与执行

常用的作用域与执行内置函数:

函数说明示例
globals()返回全局命名空间的字典globals()['x']
locals()返回当前局部命名空间的字典locals()['y']
eval(expr)执行表达式字符串并返回结果eval('1 + 2') → 3
exec(code)执行语句块字符串,无返回值exec('a = 1')
compile(src, file, mode)把源码编译为代码对象mode:exec / eval / single
__import__(name)按字符串名称导入模块,import 语句的底层实现__import__('math')

示例​

x = 10

def demo():
y = 20
print(locals()) # {'y': 20},函数内的局部命名空间

demo()
print(globals()['x']) # 10

# eval:执行表达式,返回结果
print(eval('1 + 2')) # 3
print(eval('[i ** 2 for i in range(3)]')) # [0, 1, 4]

# exec:执行语句块,没有返回值
exec('a = 1 + 1\nprint(a)') # 2

# compile:先编译为代码对象,再交给 exec 执行
code = compile('print("hello")', '<string>', 'exec')
exec(code) # hello

# __import__:按字符串名称导入模块
math = __import__('math')
print(math.sqrt(4)) # 2.0

⚠️ eval、exec、__import__ 会执行动态代码,对不可信来源的字符串使用有安全风险,应避免在生产代码中执行用户输入。