2013-10-07 56 views
-3

我完全是新手,即使我仍然在閱讀python文檔,我對自己的語法疑問感到很自私。關於調用func和語法的Python疑惑

我有我的功能my.py

def f1: 
    pass 

def f2: 
    pass 

def f3: 
    pass 

所以我想選擇一個號碼打電話像一個函數:

a = input('Insert the function number') 

「F $ d」()%A#我嘗試過這樣的事情,非常奇怪,但我是新手(有點愚蠢)。

對不起,如果這是一個愚蠢的問題,但我不知道如何才能做到這一點。

+1

另外:Python語法要求即使不帶參數的函數在它們的定義中也得到圓括號。 IOW,它必須是'def f1():pass'等。 – DSM

+0

你是什麼意思,「描述我的功能」? 'list_func'是否包含函數名? – aIKid

回答

1

你可以很容易地做到這一點。讓你的函數列表:

list_func = [f1, f2, f3] 

和TH執行:

a = int(input('insert the function number: ') #get the input and convert it to integer 
list_func[a]() #execute the function inputted 

或者不list_func:

inp = int(input('insert the function number: ') #get the input and convert it to integer 
eval('f%d'%inp) 

請記住,不要用eval()過於頻繁。這有點不安全。

或者,您可以從globals()調用它,它能夠返回全局變量和函數的字典:

globals()['f%d'%inp]() 

不,僅此而已。 希望這有助於!

+0

非常感謝! –

1

Python的函數是像int,字符串,列表等標準對象。將任意鍵(名稱,數字等)映射到對象的規範方法,以便您可以使用鍵查找對象的方法是使用dict。所以:

def func1(): 
    print "func1" 

def func2(): 
    print "func1" 

def func3(): 
    print "func1" 


functions = { 
    "key1": func1, 
    "key2": func2, 
    "key3": func3, 
    } 


while True: 
    key = raw_input("type the key or 'Q' to quit:") 
    if key in functions: 
     # get the function 
     f = functions[key] 
     # and call it: 
     f() 
    elif key == "Q": 
     break 
    else: 
     print "unknown key '%s'" % key