python - 除了 locals() 字典之外的函数内变量的信息

标签 python python-3.x local-variables

正如预期的那样,此代码引发了 UnboundLocalError。

x = 3

def f():
    print("locals: " + str(locals()))
    if x==3:
        print("x is 3!")
    x = 1

f()
然而,从输出中我们可以看到,locals() 开头是一个空字典:
locals: {}
Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/try/scatch.py", line 10, in <module>
    f()
  File "C:/Users/user/PycharmProjects/try/scatch.py", line 6, in f
    if x==3:
UnboundLocalError: local variable 'x' referenced before assignment
根据我收集的信息,locals 字典包含 Python 知道的有关函数内变量的所有信息。显然,情况并非如此:除了 locals() 之外,函数内部必须有一些关于变量的信息。
我的问题是——这些信息到底是什么?我们可以在函数的开头访问其中的变量列表吗?

最佳答案

您在 CPython 中寻找的答案是 f.__code__.co_varnames记录在 inspect 模块。

>>> def f():
...     print(f.__code__.co_varnames)
...     x = 1
...     y = 2
>>> f()
('x', 'y')

关于python - 除了 locals() 字典之外的函数内变量的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65621315/

相关文章:

python - Pandas 基于 DataFrame 中找到的字符串的新列

python - Pandas 解析 json 列并将现有列保留到新的数据框中

python - 如何使用 python 在 JSON 输出上显示所有字符串匹配

performance - Python,迭代正则表达式但在第一次匹配时停止的最快方法

c++ - 如何使用指针从不同的函数访问局部变量?

c++ - 使用局部变量调用函数或填充控制 if 语句比直接嵌套函数调用更有效吗?

没有排序的python请求有效载荷

python - pycassa ColumnFamily.get_range() 与 Lazyboy 的等效项是什么?

python - 检查 Django 中是否存在 OneToOne 关系

c++ - 从友元函数返回局部变量的引用