2013-10-16 40 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:])