2016-07-19 108 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)