[英]Python: how to make functions in arrays
我試圖使我的代碼更動態,更小,所以我嘗試使用一些數組,但是我需要在數組中放置一個函數。 我聽說過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))
但是我無法使用此方法設置值,也無法找到其他任何方法。 所以還有其他方法可以與我嘗試的方法一起工作嗎?
Python區分表達式和語句 (這里是復合語句 )。 表達式不能包含任何語句。 作業是陳述 。 lambda
是表達式 ,因此無法使用具有該語法的lambda
。
但是,使用normal 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)
調用它們將引發錯誤。
數組中的功能是可能的。 但是您不能將任務放在lambda中。 盡管傳遞了2
參數,但lambda並沒有接受任何參數。
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]
尚不清楚您需要什么,但也許這更接近您的需求。
如果要從函數列表中獲取值列表,並將單個參數傳遞給函數列表,請嘗試以下操作:
functions = [lambda x: '2' if x == 1 else None, lambda x: '3' if x == 1 else None]
values = [function(2) for function in functions]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.