Python 列表中的函数
今天在计算机科学课上,我问了一个关于把函数当作变量使用的问题。举个例子,我可以创建一个函数,比如 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
4 个回答
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
5
在Python中其实并不是这样。正如mgilson所展示的,你可以用一些简单的函数来做到这一点,但这些函数只能包含表达式,而不能包含语句,所以功能非常有限(比如你不能给变量赋值)。
当然,在其他语言中是支持的:比如在Javascript中,创建比较复杂的匿名函数并传来传去是非常常见的做法。
18
你可以使用 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