python函数中的参数传递行为
可能重复:python函数中的参数传递行为,python,Python,可能重复: 我想通过以下两个函数测试python函数中的参数传递行为: 在: 原来“a”在从f()返回后被修改了 然而,在: import numpy as np def f(a): a=np.array(a,np.float) print 'in f ',a a=[1,2] print 'ori ',a f(a) print 'now ',a 我发现从f()返回后,“a”没有更改为numpy数组 有人能解释一下吗?我经常看到这一点,所以它一定已经得到了回答,
我想通过以下两个函数测试python函数中的参数传递行为: 在: 原来“a”在从f()返回后被修改了 然而,在:
import numpy as np
def f(a):
a=np.array(a,np.float)
print 'in f ',a
a=[1,2]
print 'ori ',a
f(a)
print 'now ',a
我发现从f()返回后,“a”没有更改为numpy数组
有人能解释一下吗?我经常看到这一点,所以它一定已经得到了回答,但这是我的看法 这两条线:
a[0]=3
及
做一些完全不同的事情。第一个并没有改变a
是什么——在这一行之后仍然是相同的列表。它通常在列表的索引0处设置一个新对象。我们说它变异了它
第二行将新对象绑定到函数的局部a
变量。从那时起,函数中的a
将引用不同的对象。函数外部的a
是完全独立的,因此它仍然指向列表。两个a
最初只是引用同一个对象
不能像这样在函数外重新绑定名称。有多种方法可以避免这种情况,其中之一是返回新对象,并让调用方将返回值绑定回自己的
a
我经常看到这种情况,所以它一定已经得到了回答,但我的看法是这样的
这两条线:
a[0]=3
及
做一些完全不同的事情。第一个并没有改变a
是什么——在这一行之后仍然是相同的列表。它通常在列表的索引0处设置一个新对象。我们说它变异了它
第二行将新对象绑定到函数的局部a
变量。从那时起,函数中的a
将引用不同的对象。函数外部的a
是完全独立的,因此它仍然指向列表。两个a
最初只是引用同一个对象
不能像这样在函数外重新绑定名称。有多种方法可以避免这种情况,其中之一是返回新对象,并让调用者将返回值绑定回自己的
a
我相信十几个重复项中的一个可以。哦,您修改了代码。即使是现在,a
也不会被转换,因为您将函数中的名称a
指定为一个numpy数组(覆盖旧名称并丢失引用),并且您没有返回它(简而言之,Python使用它),至少没有人对OP投反对票。我想他没有意识到他的立场有多危险。我相信十几个重复的人中有一个可以。哦,你修改了密码。即使是现在,a
也没有转换,因为您将函数中的名称a
命名为numpy数组(覆盖旧名称并丢失引用),并且您没有返回它。简而言之,Python使用。好吧,至少没有人对OP投反对票。我想他没有意识到他的立场有多危险。
a=np.array(a,np.float)