2014-02-24 39 views
0

我有一個全局變量一,二,三...我有一個變量「num」(它是一個字符串),可以是「一個」或「兩個」或「三」 ......我想要做的下一件事:如果別的上面類似的eval「$ NUM =真」,而不是長期的:如何使用eval而不是python

if num == "one": 
    one = True 
elif num=="two": 
    two = True 
elif num=="three": 
    three = True 
... 

在Perl中我可以與1號線做。我怎麼能在Python中做到這一點?

+4

[使用eval是不好的做法](http://stackoverflow.com/a/1832957/1211429)。 –

+0

你究竟想在這裏做什麼?如果有一個更簡單的解決方案可以避免這種虛假的真實/錯誤,我不會感到驚訝。 –

+0

你幾乎肯定是在做錯誤的事情。你想達到什麼目的? –

回答

0

雖然最有可能的,有是better ways完成任何它是你正在嘗試做,這裏是如何:

one, two, three = False, False, False 
print "before:", one, two, three # before: False False False 
num = "two" 
eval("globals().update({%r: True})" % num) 
print " after:", one, two, three # after: False True False 
+0

我知道有更好的解決方案,但我正在尋找不會讓我不得不更改其他代碼的解決方案。這正是我所期待的!謝謝。 – yehudahs

8

您可以使用globals()訪問的全局名稱爲字典:

globals()[num] = True 

,但通常要保持你的數據從您的變量名。使用字典而不是全局的,而不是在這裏:

numbers = {'one': False, 'two': False, 'three': False} 

numbers[num] = True 

或可能的對象:

class Numbers: 
    one = two = three = False 

numbers = Numbers() 

setattr(numbers, num, True) 
0

評估和演示是相當危險的,所以就像全局()我提供一個稍微eligant解決方案。

如果你想創建一個字典,你的鍵是「一個」,「兩個」等等,並且值是False。然後,所有你需要做的是:

if num in switch_dict: 
    switch_dict[num] = True 

然後得到有意義的數據傳回所有你需要做的是

print switch_dict[num] 

或控制流

if switch_dict[num]: 
    <do stuff>