python - Python如何通过引用将字符串传递给函数
问题描述
def foo(arg1,arg2,arg3)
arg3="new_value"
return arg1+arg2
arg3=""
foo(1,2,arg3)
在调用 foo() 之后,我仍然在 arg3 中得到“”。我想得到 arg3=="new_value"。我怎么做?
解决方案
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"
推荐阅读
- c# - 跨 UI 和非 UI 线程使用 ObservableCollection
- php - 教义 - 如何让标量水合到相关的儿童水平
- google-cloud-platform - 如何访问 VM 实例中的存储桶数据 - Google ML Cloud
- c# - 如何序列化列表的特定对象?
- python - 使用Python或graphviz的鱼骨(fishbone)图
- struts2 - 使用 struts2 的 JSON 和数据表
- java - 春季启动应用程序
- sorting - 在TXT文件中找到“-”,前后切换,反之亦然
- html - 如何将'textarea'和'a'(按钮)标签并排放置在一行中
- android - Firebase 查询等待单值事件监听器