Python:如何在数组中生成函数

2024-04-23 14:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使我的代码更具动态性和更小,所以我尝试使用一些数组,但我需要在数组中放入一个函数。我听说过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))

但是我不能用这个方法设置值,也找不到其他方法。那么,有没有其他方法可以和我正在尝试的工作一起工作呢?你知道吗


Tags: 方法lambda函数代码innoneforif
3条回答

不完全清楚你需要什么,但也许这更接近你想要的。你知道吗


如果要从函数列表中获取值列表,并将单个参数传递到函数列表中,请尝试以下操作:

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

数组中的函数是可能的。但你不能把作业放在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]

Python区分了expressionsstatements(这里是compound statements)。表达式不能包含任何语句。assignment是一个语句^{}s表达式,因此无法将lambda与该语法一起使用。你知道吗

但是,使用普通的def不会有太大的变化:

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)调用它们将引发错误。你知道吗

相关问题 更多 >