python修改方法内的字典

python modify a dictionary inside a method

是否可以在不将字典作为参数传递的情况下修改函数内字典的值?

我不想返回字典,只想修改它的值。


这是可能的,但不一定是明智的,我无法想象为什么你不想通过或返回字典,如果你只是不想返回字典,但可以通过它,你可以修改它以反映在原始字典中,而不必返回,例如:

1
2
3
4
5
6
7
8
dict = {'1':'one','2':'two'}
def foo(d):
   d['1'] = 'ONE'

print dict['1']  # prints 'one' original value
foo(dict)
print dict['1']  # prints 'ONE' ie, modification reflects in original value
                 # so no need to return it

但是,如果您出于任何原因无法传递它,则可以使用以下全局字典:

1
2
3
4
5
6
7
8
9
10
11
global dict                    # declare dictionary as global
dict = {'1':'one','2':'two'}   # give initial value to dict

def foo():

   global dict   # bind dict to the one in global scope
   dict['1'] = 'ONE'

print dict['1']  # prints 'one'
foo(dict)
print dict['1']  # prints 'ONE'

我建议使用第一个代码块中演示的第一个方法,但如果绝对必要,可以随意使用第二个方法。享受:


可以,Dictionary是一个可变的对象,因此可以在函数中修改它们,但必须在实际调用函数之前对其进行定义。

要更改指向不可变对象的全局变量的值,必须使用global语句。

1
2
3
4
5
6
7
>>> def func():
...     dic['a']+=1
...    
>>> dic = {'a':1}    #dict defined before function call
>>> func()
>>> dic
{'a': 2}

对于不可变对象:

1
2
3
4
5
6
7
8
>>> foo = 1
>>> def func():
...     global foo
...     foo += 3   #now the global variable foo actually points to a new value 4
...    
>>> func()
>>> foo
4