Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
Run Code Online (Sandbox Code Playgroud)
有什么我可以通过实际参考传递变量吗?
这个问题与我之前的问题相关:python update external passed value from inside a for loop。
来自 Perl 背景,通过引用传递变量并从子作用域内更新值从来都不是问题,如下面的 for 循环示例所示:
#!/usr/bin/perl
my ($str1,$str2) = ('before','before');
print "before - str1:'$str1', str2:'$str2'\n";
foreach my $str($str1,$str2){$str = 'after'}
print "after - str1:'$str1', str2:'$str2'\n";
Run Code Online (Sandbox Code Playgroud)
我知道在Python中这是不可能的,因为变量是按值导入的而不是按引用导入的,到目前为止我在Python中找到的唯一能完全满足我需要的解决方案是:
def changeValue(str):
return 'after'
str1 = 'before'
str2 = 'before'
for s in str1,str2: print s
str1 = changeValue(str1)
str2 = changeValue(str2)
for s in str1,str2: print s
Run Code Online (Sandbox Code Playgroud)
虽然不理想,但如果我可以从 for 循环内调用函数“changeValue”,而不是像上面那样单独调用它们,那就可以了,但随后我又回到原来的“无法通过引用传递变量”问题。
我确信一定有一种简单且不太复杂的 Pythonic 方法来实现我所追求的目标?