什麼是正是當前局部符號表?
那麼,你可以自己看看。在你的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