2013-10-16 119 views
0

我有包含函數的字典。例如:從Python字典中評估函數

def myfunction(parameter) = return "Function with parameter " % parameter 
dictionary = {"myfunction" : myfunction} 

現在我想調用帶參數此功能,例如,如果輸入的樣子:

myfunction some string 

的第一個字是關鍵,詞典等詞語是這個函數的參數(或一個包含字符串的參數)。

可以使用eval()嗎?我如何將參數傳遞給我的函數?

感謝您的任何建議。

+1

你在發明新的語法嗎? –

+0

這在PyRubyScriptSh中是完全有效的語法。 :) – abarnert

+0

無論如何,'eval'在這裏不會幫助你,因爲你有實際的功能,而不是可以評估爲函數表達式的字符串。但這是一件好事,不是問題。如果'eval'有幫助,你通常會做錯事。 – abarnert

回答

2

這裏有一個通用的例子:

>>> def hello(name='World'): print('Hello %s' % name) 

>>> hello() 
Hello World 

>>> hello('Vist') 
Hello Vist 

>>> d = {'fun': hello} 

>>> d['fun']() 
Hello World 

>>> d['fun']('Vist') 
Hello Vist 

例如使用不同的參數個數:

>>> def hello(*args): print('Hello %s' % ', '.join(args)) 

>>> hello() 
Hello 

>>> hello('Anna') 
Hello Anna 

>>> hello('Anna', 'Bob') 
Hello Anna, Bob 

>>> hello('Anna', 'Bob', 'Clara') 
Hello Anna, Bob, Clara 

>>> s = 'hello Diane Eric' 

>>> d = {'hello': hello} 

>>> d[s.split()[0]](*s.split()[1:]) 
Hello Diane, Eric 
1

我會分裂你輸入的字符串,並使用第一小盤查找功能的詞典。然後將剩餘的塊傳遞給該函數。

s = 'myfunction some string' 
chunks = s.split() 

func = dictionary.get(chunks[0]) 

if not func: 
    print 'Not found' 
    return 

func(chunks[1:])