Python:如何在数组中创建函数

时间:2014-01-20 20:07:29

标签: python arrays function lambda

我正在尝试使我的代码更加动态和更小,所以我尝试使用一些数组,但我需要将一个函数放在一个数组中。我听说过lambda,但问题是它不需要返回任何值,但确实需要设置一个值。这是我尝试但没有奏效的方法:

variableArray = [lambda: value = '2' if variable == 1 else None,lambda: value = '3' if variable == 1 else None]
    for k in range(len(variableArray)):
        print(variableArray[k](2))

但我无法使用此方法设置值,我无法找到任何其他方法。那么还有其他方法可以解决我想做的事吗?

3 个答案:

答案 0 :(得分:3)

Python区分expressionsstatements(以及此处compound statements)。表达式包含任何语句。 assignment语句lambdas表达式,因此无法使用lambda语法。

然而,使用普通def s不会有太大变化:

def function():
    value = '2' if variable == 1 else None

此处function正在创建新的本地变量value,为其分配其值,然后将其删除。如果要修改非局部变量,必须将其声明为global

def function():
    global value
    value = '2' if variable == 1 else None

请注意,您可以将使用def定义的函数放入列表中:

some_list = [function, #other functions]

然而你应该尽量避免使用全局变量。 您应该更喜欢函数参数和返回值,以便在函数和程序的其余部分之间进行通信。

特别是你可能想要编写如下函数:

variableArray = [lambda arg: '2' if arg == 1 else None, lambda arg: '3' if arg == 1 else None]

然后你可以这样做:

for func in variableArray:
    value = func(2)

这与您的代码具有相同的效果。


请注意,lambda应该有一个参数,否则使用(2)调用它们会引发错误。

答案 1 :(得分:2)

数组中的函数是可能的。但你不能把任务放在lambdas中。而且你的lambda没有接受任何争论,尽管将2传递给他们。

for k in range(len(variableArray)):是一种浪费的坏形式。试试吧:

for k in variableArray:
    print(k(2))

至于功能,也许你想要这个?

variableArray = [lambda x: '2' if x == 1 else None, lambda x: '3' if x == 1 else None]

答案 2 :(得分:0)

目前还不完全清楚你需要什么,但也许这更接近你所追求的目标。


如果你想从函数列表中获取值列表,将一个参数传递给函数列表,试试这个:

functions = [lambda x: '2' if x == 1 else None, lambda x: '3' if x == 1 else None]
values = [function(2) for function in functions]