所以今天在计算机科学中我问过将函数用作变量。例如,我可以创建一个函数,例如returnMe(i)
,并创建一个用于调用它的数组。和h = [help,returnMe]
一样,然后我可以说h1,它会调用returnMe("Bob")
。对不起,我对此感到有些兴奋。我的问题是有一种方法可以像h.append(def function)
那样调用并定义一个只存在于数组中的函数吗?
编辑:
这是我用这个写的一些代码! 所以我刚刚用这个解决方案完成了一个很棒的FizzBuzz,非常感谢你!这是代码的例子:
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
答案 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)