请使用以下代码
#module functions.py
def foo(input, new_val):
input = new_val
#module main.py
input = 5
functions.foo(input, 10)
print input
Run Code Online (Sandbox Code Playgroud)
我以为输入现在是10.为什么不是这样?
Sve*_*ach 13
所有内容都按值传递,但该值是对原始对象的引用.如果修改对象,则调用者可以看到更改,但无法重新分配名称.而且,许多对象是不可变的(整数,浮点数,字符串,元组).
Python中的赋值不会就地修改对象.它重新绑定一个名称,以便在之后input = new_val,局部变量input获得一个新值.
如果要修改"外部" input,则必须将其包装在可变对象(如单元素列表)中:
def foo(input, new_val):
input[0] = new_val
foo([input])
Run Code Online (Sandbox Code Playgroud)
Python不完全按照C++引用传递的方式进行传递.至少在这种情况下,它更像是每个参数都是C/C++中的指针:
// effectively a no-op!
void foo(object *input, object *new_val)
{
input = new_val;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |