希望下面的描述能很好地总结一下:
这里有两件事要考虑-变量和对象。
- 如果要传递变量,则按值传递,这意味着对该函数内的变量所做的更改是该函数的局部变量,因此不会在全局范围内反映出来。这更多的是类似于“ C”的行为。
例:
def changeval( myvar ):
myvar = 20;
print "values inside the function: ", myvar
return
myvar = 10;
changeval( myvar );
print "values outside the function: ", myvar
O / P:
values inside the function: 20
values outside the function: 10
- 如果要传递打包在可变对象(如列表)中的变量,则只要不重新分配对象,对对象所做的更改就会全局反映。
例:
def changelist( mylist ):
mylist2=['a'];
mylist.append(mylist2);
print "values inside the function: ", mylist
return
mylist = [1,2,3];
changelist( mylist );
print "values outside the function: ", mylist
O / P:
values inside the function: [1, 2, 3, ['a']]
values outside the function: [1, 2, 3, ['a']]
- 现在考虑重新分配对象的情况。在这种情况下,对象指的是新存储位置,该位置在发生此功能的函数中是本地的,因此不会全局反映。
例:
def changelist( mylist ):
mylist=['a'];
print "values inside the function: ", mylist
return
mylist = [1,2,3];
changelist( mylist );
print "values outside the function: ", mylist
O / P:
values inside the function: ['a']
values outside the function: [1, 2, 3]