python - 使用自由变量时是否创建了命名空间?

标签 python list namespaces

x = 2
def my_func():
    print(x)
    print(dir())

my_func()

语句 print(dir()) 的输出是一个空列表 [] .是否创建了本地命名空间但不包含任何名称,或者根本没有创建?

最佳答案

x在您的情况下是全局的一部分,您可以通过以下方式检查它

x = 2
def my_func():
    print(x)
    print(locals())
    print(globals())

my_func()
print(locals())输出
{}

print(globals())输出
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x004FC230>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/leeron.arad/Documents/test-proj/venv/t.py', '__cached__': None, 'x': 2, 'my_func': <function my_func at 0x0058E978>}

在全局字典中,您可以看到 'x': 2打印在 my_func 中范围。x values 不是在函数中创建的,它仅来自全局范围。

关于python - 使用自由变量时是否创建了命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62114369/

相关文章:

python - 日期时间模块中异常消息的来源。值错误: year 10000 is out of range

python - 为什么 `dict_display` 允许重复键?

python - 解析源代码(Python)方法: Beautiful Soup, lxml、html5lib区别?

r - 如何制作一个其值是 r 中的列表的数据框?

python - 当我们导入一个模块时,我们是否只是让主模块可以访问导入模块的命名空间?

python - 通过带有 if 语句的函数对数据框中的数字执行操作

c# - 如何在从整数数组创建的列表中使用 ANY?

python - 如何将列表列表中的值分配给键以在python中创建字典

vb.net - 强制模块 namespace 限定

jQuery:命名空间,在另一个中使用变量