10

所以今天在计算机科学中,我询问了使用函数作为变量的问题。例如,我可以创建一个函数,例如returnMe(i)并创建一个用于调用它的数组。就像h = [help,returnMe]然后我可以说 h1 它会调用returnMe("Bob"). 对不起,我对此有点兴奋。我的问题是有没有办法调用likeh.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

4 回答 4

17

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
于 2013-03-04T19:32:04.230 回答
5

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

当然,其他语言也支持这一点:例如,在 Javascript 中,创建大量匿名函数并传递它们是一件非常惯用的事情。

于 2013-03-04T19:34:43.970 回答
4

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

#! /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
于 2013-03-04T19:40:25.297 回答
4

您可以创建一个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)

于 2013-03-04T19:55:58.803 回答