def a():
mem=['a']
def b():
mem=[]
print(str(mem))
return b
a()()
即使我不會在b函數中添加,爲什麼這段代碼仍然有效? 感謝您的幫助。爲什麼我不需要在這種情況下使用非本地?
def a():
mem=['a']
def b():
mem=[]
print(str(mem))
return b
a()()
即使我不會在b函數中添加,爲什麼這段代碼仍然有效? 感謝您的幫助。爲什麼我不需要在這種情況下使用非本地?
您已將空列表對象分配到mem
內b
,因此它已被定義。打印時查找成功。
請注意,mem
是本地名稱b
; mem
本地a
完全不受影響,這兩個名稱完全分開。
如果您預計a
的mem
改變,你要麼在b
標記mem
非本地的,或者你能避免通過直接改變mem
對象分配:
def a():
mem = ['a']
def b():
mem[:] = []
print(str(mem))
return b
a()()
這裏的名字mem
是未分配給;相反裏面的mem
列表被改變。因爲b
中沒有任務名稱mem
,所以它不是本地的。
這是可行的,因爲列表對象本身是可變的;您可以與對象交互並更改內容。
我試圖改變'一個函數'的內存 –
@MikeL:那麼你需要將它標記爲'nonlocal'。或直接更改列表對象,而不是在'b'中重新綁定'mem'。 –
是否有任何函數可以告訴我這些列表所在的位置?例如:print(func(mem)) - > b.mem(在b函數中沒有非本地) –
它不會,如果你希望'mem'在'a'範圍內被修改。 – roippi
「工作」是什麼意思?你得到了什麼輸出,哪些輸出會算作「不工作」? – geoffspear
我試圖改變從一個函數的內存,我想我應該得到的錯誤,我不能分配給內存因爲它沒有被定義 –