Python如何将字符串按引用传递给函数以修改外部变量值
Python函数调用后修改外部字符串变量的实现方案
问题根因
Python 中字符串属于不可变类型,函数参数传递的是对象引用。你在函数内部对arg3执行赋值操作时,只是修改了函数局部作用域内变量的指向,不会改动外部全局作用域的arg3变量,因此调用后外部arg3还是空字符串。另外注意你当前的代码存在语法问题:函数定义行末尾缺少冒号:,直接运行会报错。
可选实现方案
方案1:函数返回修改后的值,外部接收(最推荐)
这是Python的惯用写法,无副作用,可维护性最高:
def foo(arg1, arg2, arg3): arg3 = "new_value" # 同时返回运算结果和修改后的arg3 return arg1 + arg2, arg3 arg3 = "" # 外部接收返回值更新arg3 calculate_res, arg3 = foo(1, 2, arg3)
执行完成后arg3的值就会变为new_value。
方案2:用可变容器包裹目标变量
如果需要同时修改多个参数不想返回过多值,可以把字符串放到列表这类可变容器中,函数内部直接修改容器内元素即可:
def foo(arg1, arg2, arg3_container): # 直接修改可变容器内的元素 arg3_container[0] = "new_value" return arg1 + arg2 # 把字符串放到列表里 arg3 = [""] foo(1, 2, arg3) # 取修改后的值 print(arg3[0]) # 输出:new_value
方案3:用global关键字修改全局变量(不推荐)
如果arg3是全局变量,可以在函数内用global声明后直接修改,但这种写法会引入隐式副作用,不利于调试和维护,非必要不建议使用:
def foo(arg1, arg2): # 声明要修改全局变量arg3 global arg3 arg3 = "new_value" return arg1 + arg2 arg3 = "" foo(1, 2)
执行后全局arg3会被更新为new_value。
内容的提问来源于stack exchange,提问作者Nikky Leed
相关产品推荐
相关产品推荐

