2012-04-09 65 views
-3

我需要調用它的名字是在Python 例如,在一個字符串能夠使用的功能:從字符串運行函數

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] 

我需要執行上面的語句,但變量數可根據用戶增加輸入任何想法?

又如:

a = "for y in range(2,20):print y" 

我需要執行上述字符串作爲蟒命令

實際的問題是沒有環和可變可能增加取決於輸入 somtimes我wnat遍歷3項所以3循環有時4項然後4循環 所以我想通過這種方式,如果我生成字符串與變量,如果我可以執行它可以解決問題

+2

錯誤,字符串在哪裏? – kennytm 2012-04-09 14:09:55

+1

功能在哪裏? – Spacedman 2012-04-09 14:10:48

+0

你說變量數可能會增加,你的意思是列表嗎?你能再解釋一下你想要什麼嗎? – George 2012-04-09 14:12:21

回答

3

內置eval功能是你在找什麼:

s = "[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]" 
result = eval(s) 

如果你想要的變量,你可以使用locals說法:如果你想,而不是執行計算表達式的語句

>>> eval("s.upper()",{'s':'hello'}) 
'HELLO' 

,使用exec

>>> a = "for y in range(2,20):print y" 
>>> exec a 
2 
3 
... 
19 
+0

您可能想建議警告還是兩個關於安全性?'Eval'很好,但只在一個受控的環境中。 – Droogans 2012-04-09 14:17:48

+0

'eval'似乎並不像我想要的那樣工作 我給了上述字符串來評估它導致語法錯誤 – Sreevisakh 2012-04-09 14:20:35

+0

@ Droogans:對,我希望輸入不是來自不受信任的用戶:) – Krumelur 2012-04-09 14:21:54