快速,新手Python范围问题。如何确保原始变量在下面的for循环中更改?
for name in [name_level_1, name_level_2, name_level_3, name_level_4]:
name = util.translate("iw", "en", name.encode('utf-8'))
print name_level_1
换句话说,我希望print
语句打印出已更改的变量,而不是原始变量。 Python没有指针,对吧?
谢谢!
答案 0 :(得分:3)
我认为你不能做你想做的事。
要做类似的事情,你可以在数组中使用索引:
names = [name_level_1, name_level_2, name_level_3, name_level_4]
for i in range(len(names)):
names[i] = util.translate("iw", "en", names[i].encode('utf-8'))
print names[0]
但通常对于这类事情你只需要使用列表理解:
names = [name_level_1, name_level_2, name_level_3, name_level_4]
names = [util.translate("iw", "en", name.encode('utf-8')) for name in names]
答案 1 :(得分:0)
使name_level_1成为一个对象:
class LevelOne(object):
def __init__(self):
self.x = 3
name_level_1 = LevelOne()
count = 0
for name in [name_level_1, LevelOne(), LevelOne()]:
name.x = count
print name_level_1.x
答案 2 :(得分:0)
Python有引用和对象而不是指针(从概念层面)。
您要做的是将name_level_1的新值分配给循环后存在的某个名称。
因此,要么解开循环并在需要的地方使用每个名称,例如
name_level_1_translated = util.translate("iw", "en", name_level_1.encode('utf-8'))
print name_level_1_translated
name_level_2_translated = util.translate("iw", "en", name_level_2.encode('utf-8'))
do_stuff(name_level_2_translated)
或者,如果您要以相同的方式使用每个名称,只需创建一个列表并在任何地方使用它。
names = [name_level_1, name_level_2, name_level_3, name_level_4]
translated_names = [util.translate("iw", "en", name.encode('utf-8')) for name in names]
for name in translated_names:
print name
您也可以通过索引访问它们:
print names[0]
答案 3 :(得分:0)
您可以使用globals()
操作全局命名空间中的名称:
for name,value in globals().items():
if name.startswith("name_level_"):
globals()[name] = util.translate("iw", "en", value.encode('utf-8'))
但是,将名称存储在数组或字典中可能是个更好的主意。
答案 4 :(得分:0)
避免使用大量相关变量污染您的命名空间,将它们组合在一个字典或列表中。 e.g。
NAMES = { 'level_1': 'something', 'level_2': 'something else',
'level_3': 'whatever', 'level_4': 'and so on' }
for name in NAMES:
NAMES[name] = util.translate("iw", "en", NAMES[name].encode('utf-8'))
print NAMES['level_1']