我有一个python脚本,我正在从其他人那里学习,并试图了解它运行时发生了什么
我在当前目录中有一个名为_version _uu.py的文件,其中包含以下行:
__version__ = "1.0"
在单独的脚本中,我有以下代码:
import os
gdict = {}
curr_dir = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(curr_dir, "__version__.py")) as f:
exec(f.read(), gdict)
我对执行官的声明感到困惑。通过阅读文档,我的理解是gdict用于指定exec()函数可以使用哪些全局函数,并且由于它是空的,因此除了内置函数之外,exec()不应该有任何可用的函数。我原以为gdict将保持为空,但当我运行此代码,然后查看gdict.keys()时,我看到:
dict_keys(['__builtins__', '__version__'])
我知道f.read()正在创建一个名为“\uuuu version\uuuuuu”的全局变量,其值为“1.0”,但gdict是如何填充的
由于python字典是可变的,所以程序中的gdict会发生变化。运行exec(f.read(),gdict)时,所有可用的内置项都将添加到globals dict中,这在查看gdict.keys()时会反映出来
相关问题 更多 >
编程相关推荐