2011-10-11 35 views
35
primes = [2,3,5,7..] (prime numbers) 
map(lambda x:print(x),primes) 

Nó không in bất cứ thứ gì. Tại sao vậy? Tôi đã thửIn không in khi nó ở trong bản đồ, Python

sys.stdout.write(x) 

quá, nhưng không hoạt động.

+0

Python 2 hoặc Python 3? –

+4

Đó là một lỗi cú pháp trong Python 2, vì vậy tôi giả sử Python 3. –

Trả lời

56

Kể từ lambda x: print(x) là một lỗi cú pháp trong Python < 3, tôi giả Python 3. Điều đó có nghĩa map trả về một máy phát điện, có nghĩa là để có được bản đồ để thực sự gọi hàm trên mọi phần tử của danh sách, bạn cần phải lặp qua bộ tạo kết quả.

May mắn thay, điều này có thể được thực hiện một cách dễ dàng:

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

Oh, và bạn có thể thoát khỏi những lambda quá, nếu bạn thích:

list(map(print,primes)) 

Nhưng, vào thời điểm mà bạn đang tốt hơn tắt với cho phép in xử lý nó:

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

LƯU Ý: Tôi đã nói trước đó rằng '\n'.join sẽ là một ý tưởng hay. Đó là chỉ đúng cho một danh sách các str's.

+2

Nó vẫn là một ý tưởng rất tồi (không thành ngữ, không rõ ràng - bản đồ, bộ lọc, danh sách hiểu, vv là để tính toán, không cho tác dụng phụ) Tuy nhiên. Bạn chỉ nên sử dụng vòng lặp for, hoặc 'print (* primes, sep = '\ n')', hoặc 'print ('\ n'.join (str (x) cho x trong số nguyên tố))'. – delnan

+0

'print (x)' không phải là một lỗi cú pháp trong Python <3. Edit: Xin lỗi, đó là lỗi cú pháp trong câu hỏi này. – utdemir

+1

@utdemir: Xuất hiện trong một 'lambda' hoặc bất kỳ biểu thức nào khác, đó là (có hoặc không có parens). Tôi cho rằng OP có nghĩa là bạn chỉ muốn nitpick trên từ ngữ;) – delnan

5

này làm việc cho tôi:

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

Bạn đang sử dụng Python 2.x nơi in là một tuyên bố, không phải là một chức năng?

+1

Nó hoạt động đặc biệt bởi vì bạn đang sử dụng Python 2. Trong Python 3, nó không. Và OP có nhiều khả năng sử dụng 3.x vì 'in' được sử dụng làm hàm và vì' sys.stdout.write' "không hoạt động". – delnan

+0

bạn thực sự có thể thực hiện 'ánh xạ (in, số nguyên tố)' trực tiếp, mà không cần định nghĩa hàm lambda. – hitzg