什么是正是当前局部符号表?
那么,你可以自己看看。在你的Python,程序非常beginging,这里是由locals()
返回的符号表的样子:
print(locals())
,输出:
{'__doc__': None, '__spec__': None, '__package__': None, '__builtins__':
<module 'builtins' (built-in)>, '__name__': '__main__', '__loader__':
<class '_frozen_importlib.BuiltinImporter'>,
'__file__': 'C:\\Users\\$Name$\\Desktop\\script.py'}
符号表由几个“神奇变量”的,以及关于你当前的Python文件的一些信息。如__file__
密钥,其中包含当前源文件的名称。什么当地人的说明返回几乎相匹配的定义为一个符号表:
在计算机科学中,符号表是由一个语言翻译器使用的数据结构,诸如编译器或解释,其中每个标识符在程序的源代码与其声明或外观在源中的相关信息相关联。 - Wikipedia: Symbol table
(重点煤矿)
保证是一样的参数字典,如果当地人()被调用的函数的最开始的局部符号表?
这个问题的答案会 是。函数有自己的范围。而且,正如名称暗示的那样,locals()
仅返回当前范围本地的标识符。因此,函数内部调用locals()
不能被程序的外部范围所改变。例如。
>>> var = 10 # global variable
>>> locals()['var'] # var is accessible in the current scope
10
>>> def func():
print(locals()['var']) # but not in this scope. Python will raise an error
>>> func()
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
func()
File "<pyshell#16>", line 2, in func
print(locals()['var'])
KeyError: 'var'
>>>
它是一个有点难以完全明白你问的第二个问题,所以我很抱歉,如果我的回答是没有关系的。但我相信你的问题:如果我在我的功能开始时拨打locals()
,在我的定义里面,保证保持不变的是当地人返回的dict()
?。如果情况并非如此,请更新您的问题,我会尝试重新回答。
@idjaw这个问题根本没有提及*符号表*。 – Cyker
@idjaw仅供参考我想将函数中的参数传递给另一个函数,但为了便于阅读,我不想将函数原型更改为'(* args,** kwargs)'。如果'locals()'与函数开头的参数dict完全相同,那么传递参数将非常容易。 – Cyker
重新读你的问题我看到你所问的细节。我会删除以消除混淆。 – idjaw