簡體   English   中英

具有打印和列表理解功能的lambda

[英]lambda with print and list comprehension

lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)]

該代碼有什么問題,它不打印任何內容。

如果我嘗試使用其他功能進行打印,則工作正常。 但是我也試圖在同一條語句中添加打印代碼。

以下代碼為我工作,

map(lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)])

逗號終止了lambda。 您正在創建具有兩個值的元組。 第一個是lambda i: print(i) ,第二個是列表推導。 好像您正在執行此操作:

def func(i):
    print(i)
(func, ["%d...])

第二個問題是您似乎沒有在任何地方調用lambda。 lambda只是創建一個沒有名稱的函數。 為了執行它,您需要將其分配給一個變量,然后調用它:

x = lambda i: print(i)
x(12)

如果您要執行的操作是從列表推導中調用print函數,則在python 3.x中它應該可以正常工作,因為print是一個函數。 如果您試圖使它在python 2.x中工作,則有兩種解決方案。 首先,您可以導入打印功能:

from __future__ import print_function
[print("%d even"% i) if i % 2 == 0 else print("%d odd"% i) for i in random.sample(range(100), 10)]

如果要使用lambda,則將lambda保存為變量,然后在列表推導中使用該變量:

func = lambda i: print(i)
[func("%d even"% i) if i % 2 == 0 else func("%d odd"% i) for i in random.sample(range(100), 10)]

Lambda的身體必須是單個表達。 在Python 2.x中,print是一條語句。 但是,在Python 3中,print是一個函數(函數應用程序是一個表達式,因此它將在lambda中工作)。 如果使用的是最新的Python 2.x,則可以(並且應該,為了向前兼容:)使用向后移植的打印功能。

為何無法在lambda中打印?

如果您使用的是python2.x。 先嘗試一下

from __future__ import print_function

In [2]: from __future__ import print_function

In [3]: myfn = lambda i: print(i)

In [4]: myfn(55)
55

您正在制作一個由lambda函數和一個列表組成的元組。

但是,您可以輕松訪問元組的最后一項(這就是您要打印的結果):

>>> g = lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)]

>>> g
(<function <lambda> at 0x1063fa268>, ['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd'])

>>> type(g)
<class 'tuple'>

>>> for item in g:
...  print(item)
... 
<function <lambda> at 0x1063fa268>
['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd']

>>> g[0]
<function <lambda> at 0x1063fa268>

>>> g[1]
['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd']

暫無
暫無

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

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