我的问题是How do I pass a variable by reference?的轻微变化 - 但是我仍然无法找到解决下面问题的简单解决方案:如何更改外部字符串变量的值来自for-loop?
str1 = 'before'
str2 = 'before'
for i in str1,str2:
print "%s" % (i)
i = "after"
for i in str1,str2:
print "%s" % (i)
感谢下面的有用回复,但是他们对我的具体问题并没有真正帮助,下面的代码不太通用,但更好地反映了我的用例:
import feedparser
d = feedparser.parse('http://feeds.feedburner.com/FrontlineAudiocastPbs?format=xml')
name = d.feed.title[:127]
description = d.feed.subtitle[:255]
strs = [name,description]
for i, s in enumerate(strs):
try:
strs[i] = unicode(strs[i])
except:
strs[i] = "Invalid unicode detected!"
for s in name,description:
print s
您可以看到两个原始字符串变量未更新。 for循环用于检测和处理格式错误的字符串,例如“描述”的赋值。所以任何“关联”的建议都会受到赞赏。
我喜欢下面列表理解切片分配方法的优雅,理想情况下会使用这种技术。
答案 0 :(得分:5)
创建字符串列表而不是将它们作为单独的变量处理,然后您可以使用enumerate
循环它们:
strs = ['before', 'before']
for i, s in enumerate(strs):
print s
strs[i] = "after"
print strs
答案 1 :(得分:3)
一种解决方法是以不同方式构建数据,例如使用:
d = {'str1': 'before', 'str2': 'before'}
for i in d:
print d[i]
d[i] = "after"
重要的是这个变量是可变的(如链接中所述)。
答案 2 :(得分:1)
strs = ['before', 'before']
strs[:] = ['after' for s in strs]
答案 3 :(得分:-1)
str1 = 'before'
str2 = 'before'
import sys
currentobject = sys.modules[__name__]
for i in 'str1', 'str2':
setattr(currentobject, i, 'after')
for i in str1,str2:
print "%s" % (i)