Python 列表中的函数

10 投票
4 回答
34533 浏览
提问于 2025-04-17 17:54

今天在计算机科学课上,我问了一个关于把函数当作变量使用的问题。举个例子,我可以创建一个函数,比如 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

撰写回答