2011-10-11 26 views

cevap

56

Python < 3'te bir yazım hatasıdır, aslında bir listenin bütün elemanları üzerinde işlevini çağırmak için harita almak için anlam bir jeneratör döner map anlamına Python 3. farz ediyorum, çıkan sonuçlara yinelemek gerekiyor sonuçta elde edilen jeneratör.

list(map(lambda x:print(x),primes)) 

Oh, ve isterseniz siz de lambda kurtulabilirsiniz:

Neyse ki, bu kolayca yapılabilir bu noktada daha iyi olan,

list(map(print,primes)) 

Ama icar baskı ile kapalı idare:

print(*primes, sep='\n') 

NOT: Daha önce '\n'.join'un iyi bir fikir olacağını söyledim. Bu sadece str'lerin listesi için geçerlidir.

+2

Hala çok kötü bir fikir (idiomatik olmayan, belirgin değil - harita, filtre, liste anlamaları vb. Hesaplamalar içindir, yan etkiler için değildir) gerçi. Sadece bir for döngüsü veya 'print (* primes, sep = '\ n')' veya 'print ('\ n'.join (xr için prim'ler için str (x)'))) kullanmalısınız. – delnan

+0

'print (x)' Python <3'te bir sözdizimi hatası değil. Düzen: Üzgünüz, bu soruda sözdizimi hatası var. – utdemir

+1

@utdemir: Bir lambdada veya başka bir ifadede, (parens ile veya parens olmadan). Ben OP bu anlama geliyordu ve sadece ifade üzerinde nitpick istiyorum;) – delnan

5

Bu benim için çalışıyor:

>>> from __future__ import print_function 
>>> map(lambda x: print(x), primes) 
2 
3 
5 
7 
17: [None, None, None, None] 

baskı açıklamada, bir fonksiyon olduğu Python 2.x kullanıyor musunuz?

+1

Özellikle Python 2 kullandığınız için çalışır. Python 3'te, bunu yapmaz. Ve 'print' işlev olarak kullanıldığından ve sys.stdout.write'den sonra çalışmadığından OP'nin 3.x kullanımı daha olasıdır. – delnan

+0

aslında bir lambda fonksiyonu tanımlamaksızın, doğrudan harita (baskı, primes) yapabilirsiniz. – hitzg

İlgili konular