簡體   English   中英

一行接收多功能輸出

[英]Receiving multiple function outputs in one line

假設我有多個功能:

type = {'a', 'b', ..., 'z'}
f={}
f['a'] = some func_a...
f['b'] = some func_b...
...
f['z'] = some func_z...

現在我想獲得它們的輸出

output = {}
for t in type:
    output[t] = f[t](input)

我想知道是否有任何方法可以使用循環以另一種方式在一行中完成此操作,例如

[output[t] for t in type] = [f[t](input) for t in type]

當然,這是行不通的。 那么會有什么有效的方法嗎?

您需要字典理解 它的工作方式類似於列表推導,但不是提供單個表達式來構成值,而是提供了兩個表達式來生成鍵和值:

output = {t: f[t](input) for t in type}

dict理解會產生一個新的字典對象; 沒有必要或不需要使用初始output = {}行。

我只是遍歷f的項,因為它已經有了我們需要的鍵:

output = {t: func(input) for t, func in f.items()}

附帶說明一下,不要對所有f函數使用單獨的分配,而只需使用一個字典定義即可:

f = {
    'a': some_func_a,
    'b': some_func_b,
    # ...
    'z': some_func_z,
}

type也不是變量的好名字,因為它掩蓋了您有時可能想使用內置函數 您不需要單獨創建該集合,因為對f迭代將為您提供相同的鍵,或者您可以使用set(f)創建一個集副本,或使用f.keys()來獲得一個字典視圖對象f的鍵 ,其作用類似於集合,但在其中是有效的,因為f更改反映在其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM