首页 > 解决方案 > Python如何通过引用将字符串传递给函数

问题描述

def foo(arg1,arg2,arg3)
   arg3="new_value"
   return arg1+arg2
arg3=""
foo(1,2,arg3)

在调用 foo() 之后,我仍然在 arg3 中得到“”。我想得到 arg3=="new_value"。我怎么做?

标签: pythonstringreferencearguments

解决方案


Python 总是按值接收参数,因此将新值分配给函数体内的参数变量不会影响调用者。

如果该值是mutable,那么在函数体内对其进行变异影响调用者,但字符串是不可变的(您无法调用会更改其内容的字符串的方法,只能返回一个新字符串)。

通常,处理您描述的情况的方法是简单地返回多个值:

def foo(arg1,arg2,arg3)
   arg3="new_value"
   return arg1+arg2, arg3
arg3=""
_, arg3 = foo(1, 2, arg3)

但是,如果您需要一个不可变的参数是可变的,那么一个简单的解决方法(不涉及 using global)是将其包装在一个可变容器中,例如一个列表:

def foo(arg1,arg2,arg3)
   arg3[0]="new_value"
   return arg1+arg2
arg3=[""]
foo(1,2,arg3)
# arg3[0] is now "new_value"

推荐阅读