希望下面的描述能很好地总结它:
这里有两件事要考虑 - 变量和对象。
- 如果您正在传递一个变量,那么它是按值传递的,这意味着对函数内变量所做的更改对该函数是本地的,因此不会在全局范围内反映出来。这更像是一种类似“C”的行为。
例子:
def changeval( myvar ):
myvar = 20;
print "values inside the function: ", myvar
return
myvar = 10;
changeval( myvar );
print "values outside the function: ", myvar
输出/输出:
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
输出/输出:
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
输出/输出:
values inside the function: ['a']
values outside the function: [1, 2, 3]