我正在尝试使我的代码更加动态和更小,所以我尝试使用一些数组,但我需要将一个函数放在一个数组中。我听说过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))
但我无法使用此方法设置值,我无法找到任何其他方法。那么还有其他方法可以解决我想做的事吗?
答案 0 :(得分:3)
Python区分expressions和statements(以及此处compound statements)。表达式不包含任何语句。 assignment是语句。 lambda
s是表达式,因此无法使用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]