列表中的Python函数

时间:2013-03-04 19:31:23

标签: python list functional-programming

所以今天在计算机科学中我问过将函数用作变量。例如,我可以创建一个函数,例如returnMe(i),并创建一个用于调用它的数组。和h = [help,returnMe]一样,然后我可以说h1,它会调用returnMe("Bob")。对不起,我对此感到有些兴奋。我的问题是有一种方法可以像h.append(def function)那样调用并定义一个只存在于数组中的函数吗?

编辑:

这是我用这个写的一些代码! 所以我刚刚用这个解决方案完成了一个很棒的FizzBu​​zz,非常感谢你!这是代码的例子:

funct = []
s = ""

def newFunct(str, num):
    return (lambda x: str if(x%num==0) else "")

funct.append(newFunct("Fizz",3))
funct.append(newFunct("Buzz",5))

for x in range(1,101):
    for oper in funct:
        s += oper(x)
    s += ":"+str(x)+"\n"

print s

4 个答案:

答案 0 :(得分:13)

您可以使用lambda关键字创建匿名函数。

def func(x,keyword='bar'):
    return (x,keyword)

大致相当于:

func = lambda x,keyword='bar':(x,keyword)

所以,如果你想创建一个包含函数的列表:

my_list = [lambda x:x**2,lambda x:x**3]
print my_list[0](2)  #4
print my_list[1](2)  #8

答案 1 :(得分:4)

不是真的在Python中。正如mgilson所示,您可以使用简单的函数执行此操作,但它们只能包含表达式,而不能包含语句,因此非常有限(例如,您无法分配给变量)。

当然,这在其他语言中是受支持的:例如,在Javascript中,创建实质性的匿名函数并传递它们是非常惯用的事情。

答案 2 :(得分:3)

您可以在原始范围中创建函数,将它们分配给数组,然后将其从原始范围中删除。因此,您确实可以从数组中调用它们,但不能将其作为局部变量。我不确定这是否符合您的要求。

#! /usr/bin/python3.2

def a (x): print (x * 2)
def b (x): print (x ** 2)

l = [a, b]

del a
del b

l [0] (3) #works
l [1] (3) #works
a (3) #fails epicly

答案 3 :(得分:3)

您可以创建一个lambda函数列表,按0到9之间的每个数字递增,如下所示:

increment = [(lambda arg: (lambda x: arg + x))(i) for i in range(10)]
increment[0](1) #returns 1
increment[9](10) #returns 19

旁注:

我认为同样重要的是要注意这个(函数指针不是lambdas)有点像python如何在大多数类中保存方法,除了代替列表,它是一个函数名称指向函数的字典。在很多但并非所有情况下,instance.func(args)相当于instance.__dict__['func'](args)type(class).__dict__['func'](args)