2016-07-19 147 views
3

在Python撰寫地圖功能撰寫功能

你好

今天,我用兩個地圖調用上01串變換面具布爾:

>>> a, b = '10' 
>>> a, b = map(int, (a, b)) 
>>> a, b = map(bool, (a, b)) 
>>> a, b 
(True, False) 

怎麼辦那只有一張地圖?

+5

你試過'地圖(拉姆達X:布爾(INT(X)),( a,b))? – vaultah

回答

4

Python沒有函數組合操作符,所以沒有內置的方法來做到這一點。在這種特殊情況下,最簡單的方式向map呼叫減少到一條線是一個lambda:

a, b = map(lambda x: bool(int(x)), (a, b)) 

你可以寫一個更一般的compose function很輕鬆了,並使用它:

def compose(*fns): 
    return reduce(lambda f, g: lambda x: f(g(x)), fns, lambda x: x) 

a, b = map(compose(bool, int), (a, b)) 

但說實話,後一種方法似乎在這裏過度殺傷。

1

你可以把工作中的一行代碼通過使用兩個列表內涵,而不是map()這樣做:

>>> a, b = [bool(number) for number in [int(letter) for letter in '10']] 
>>> a, b 
(True, False)