【问题标题】:List of variables from local scope本地范围的变量列表
【发布时间】:2018-04-07 10:34:45
【问题描述】:

在 python 中dir 显示命名空间中定义的所有名称。我检查了一下,效果很好。 但是当我使用dir(function_name) 时,它没有显示我在函数中创建的变量。为什么?

这是一个代码示例:

>>> def printHello(greetings):
...     inside_func=2
... 
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'printHello',]
>>> dir(printHello)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

【问题讨论】:

  • 在你的开发生涯中这么早打开一本书比问一个问题要好...
  • 来自dir 的文档:“dir([object]) 不带参数,返回当前本地范围内的名称列表。带参数,尝试返回该对象的有效属性列表。 "
  • 使用代码块来显示你的代码而不是截图,看看这个article
  • 因为函数内部的局部变量不是函数对象的属性。此外,您从未调用过该函数,因此它实际上从未存在过。
  • 你试过reading the docs for dir吗?

标签: python namespaces


【解决方案1】:

至于为什么dir(youfunc) 没有列出本地变量,这很简单,因为据记录dir(obj) 列出了obj属性,而本地变量不是函数对象的属性.

在函数本身之外,您可以使用yourfunc.func_code.co_varnames 获取函数的局部变量名称列表(注意参数是局部变量):

def foo(bar):
    baaz = 42
print(foo.func_code.co_varnames)

但您显然无法从函数外部访问本地 vars 值,因为这些值仅在函数执行时存在。

在函数中,您可以使用 locals() 获取本地变量:

def foo(bar):
    baaz = 42
    print(locals())

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2013-11-06
    • 2018-12-06
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    相关资源
    最近更新 更多