From 文档:
导入的通配符形式——from module import *
— 仅允许在模块级别。尝试在类或函数定义中使用它会引发SyntaxError
.
为什么?避免在函数中使用它有什么意义?有什么问题?
CPython 实现对局部变量使用了特殊的优化:它们不像全局变量那样在运行时从字典中动态查找,而是静态分配索引编译时间,并且在运行时通过索引查找,这要快得多。这要求 Python 编译器能够在编译时识别所有本地名称,如果在函数级别进行通配符导入,则这是不可能的。
在 Python 2 中,仍然存在一种后备机制,在无法始终静态确定所有本地名称的情况下会调用该机制。这种机制使用局部变量的动态字典,显着减慢了执行速度。
例如这段代码
def f():
exec "x = 2"
print x
在 Python 2 中按预期工作,而
def f():
exec("x = 2")
print(x)
结果是NameError
在Python 3中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)