2013-04-03 48 views
0

在這個程序中,我使用了一個用戶輸入來選擇用戶想要對齊一些文本的對齊方式,目前我用usinf如果像這樣的語句...Python使用用戶輸入的字符串調用函數

if alignment == "Left": 
    line = left(new_string) 
elif alignment == "Right": 
    line = right(new_string) 
elif alignment == "Centre": 
    line = centre(new_string) 
elif alignment == "Fully": 
    line = fully(new_string) 
else: 
    print "Error." 

但是,有沒有一種方法可以擺脫這些陳述,只是使用用戶輸入來調用左,右,中心,完全功能。

感謝 JT

回答

4

地圖的alignment字符串函數與字典:

alignments = {'Left': left, 'Right': right, 'Centre', centre, 'Fully': fully} 

try: 
    line = alignments[alignment](new_string) 
except KeyError: 
    print "Error." 

Python函數是第一類對象,所以你可以將它們存儲在一個字典中的值。

+0

十分感謝! – jtaylor94

0
func = globals().get(alignment.lower()) 
if not func: 
    func = locals().get(alignment.lower()) 
func(new_string) 

你應該確保FUNC是不是在它被調用的時候

0

評價它

try: 
    eval(alignment.lower())(new_string) 
except NameError: 
    print 'Error' 
+0

Yeehaw!讓我們輸入'os.system'然後...和'new_string' ...讓我們取一些任意的東西,比如'rm -rf /',也許...... – glglgl