1

我的问题是如何通过引用传递变量?- 但是我仍然找不到解决下图问题的简单方法:如何从 for 循环中更改外部字符串变量的值?

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 循环旨在检测和处理格式错误的字符串,例如分配给“描述”的字符串。因此,任何“相关”的建议都会受到赞赏。

我喜欢下面列表理解切片分配方法的优雅,理想情况下会使用该技术。

4

4 回答 4

5

制作一个字符串列表,而不是将它们作为单独的变量处理,然后您可以使用以下命令遍历它们enumerate

strs = ['before', 'before']
for i, s in enumerate(strs):
    print s
    strs[i] = "after"

print strs
于 2012-09-05T17:14:26.587 回答
3

一种解决方法是以不同的方式构造数据,例如使用:

d = {'str1': 'before', 'str2': 'before'}
for i in d:
    print d[i]
    d[i] = "after"

重要的是这个变量是可变的(如您的链接中所述)。

于 2012-09-05T17:02:30.227 回答
1
strs = ['before', 'before']
strs[:] = ['after' for s in strs]
于 2012-09-05T17:02:09.460 回答
-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)
于 2012-09-05T17:05:45.153 回答