【发布时间】:2012-09-06 15:04:40
【问题描述】:
这个问题与我之前的问题有关:python update outer passed value from within 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";
我知道在 Python 中这是不可能的,因为变量是 by-value 而不是 by-reference 导入的,这是迄今为止我在 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
虽然不理想,但如果我可以 从 for 循环中调用函数 'changeValue',这将是 OK - 而不是像上面那样单独调用它们 - 但是然后我回到原来的“不能通过引用传递变量”的问题。
我确信一定有一种简单且不那么复杂的 Python 方式来实现我所追求的目标?
【问题讨论】:
-
s1 = change(s1)和change(s1)之间的真正区别是什么?请注意,python 确实通过引用传递,只是赋值创建了一个新引用,并且某些类型(int,str,...)是不可变的,因此没有真正的方法来更改参考文献... -
顺便说一句:为什么你一直显示示例代码而不是你的真实代码?真正的代码总是获得有用帮助的更好方式。
-
Ned - 我之前的链接问题包含用例或“真实”代码
-
mgilson,感谢您的提示
change(s1)
标签: python perl reference for-loop scope