![](/img/trans.png)
[英]Modifying Local Within Function Changes Global Passed to Function in Python
[英]Modifying global dictionary in python within a function
#!/usr/bin/env python
def modify_dict():
d['two'] = 2
d = {'one':1}
modify_dict()
print d
我懂了
$ ./globaltest.py
{'two': 2, 'one': 1}
我希望只看到{'one':1}
因為d在函數中未聲明為全局。 為什么d同時獲得兩個鍵值對?
一個快速的解決方法是在功能的本地范圍內復制字典。
import copy
d = {'one':1}
def modify_dict():
local_d = copy.deepcopy(d)
local_d['two'] = 2
print local_d
modify_dict()
print d
您將看到以下輸出:
>>>{'two': 2, 'one': 1}
>>>{'one': 1}
Python搜索變量基於LEGB
規則:
Local, Enclosing functions, Global, Built-in
調用函數時,它將嘗試查找名為d的變量,並且自從在調用函數之前創建d以來便會在全局范圍內查找。 並且由於d是可變的,因此它將被更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.