2012-06-01 35 views
1

我有很多的功能,如果我有一个数组[echo, "Bob is Good"]我想运行回声函数我有整个数组的参数。所以它需要arr[0]并使用整个数组的参数运行该函数。现在我只是有如果陈述,例如:如何制作“函数字典”?

... 
elif arr[0] == 'echo': 
    echo(arr) 
elif arr[0] == 'var': 
    var(arr) 

此外,最好现在我有我的功能设置与cmd的前缀。例如echo函数将被称为echocmd,所以如果有一种方法来实现它,那也会很棒!

回答

5

显而易见的方法。

funcdict = { 
    'echo': echocmd, 
    'var': varcmd, 
    ... 
} 

... 

funcdict.get(arr[0], invalidcmd)(arr) 
+0

wouldvalidcmd是如果没有匹配就调用的命令? –

+0

@Plazmotech:正确。 –

+0

谢谢,这个工作令人惊讶:D –

0

可以存储功能,直接在列表中(它们不是阵列;在Python,这意味着不同的东西):

def echocmd(foo, bar, baz): 
    print foo, bar, baz # for testing 

my_data = [echocmd, 'spam', 'and', 'eggs'] 
my_data[0](*my_data[1:]) 
+0

TypeError:'str'对象不可调用 - 它被转换成字符串,当我拆分它 –

+1

因此,分裂后,用相应的函数替换字符串,使用这种方法。否则,当你需要拨打电话时请查看它。这取决于你在做什么。如果你希望人们设计出符合你要求的东西,你需要提供更多关于这些要求的信息。 –

0

两种方式:

  • 山口代表值,即与您想要运行的函数相对应的字符串或整数。使用字典将该值编入实际函数。

  • 传递对实际函数的引用,并使用引用来调用它。

第二个是更一般 - 你可以弥补你喜欢的任何功能并通过它。第一个可以让你“翻译”你的解释器,限制什么功能是允许的,并且也可以更容易地存储在外部。