2011-01-25 33 views
6

Tôi chỉ thử nghiệm trong Python với cú pháp khác nhau để thông qua trong một máy phát điện như một tham số để một hàm, và tôi nhận ra rằng mặc dù tôi đã làm điều này,Tại sao bạn có thể bỏ qua các dấu ngoặc đơn xung quanh cho các máy phát trong Python khi chuyển nó vào một hàm?

>>> sum((j for j in xrange(5))) 
10 

này hoạt động cũng như:

>>> sum(j for j in xrange(5)) 
10 

Điều này được thử nghiệm trên Python 2.6.6 trên Linux. Điều gì đang xảy ra dưới mui xe? Nó chỉ là cú pháp đường? Sau khi tất cả, thường là một máy phát điện nào là không thể đọc để người phiên dịch:

>>> j for j in xrange(5) 
    File "<stdin>", line 1 
    j for j in xrange(5) 
     ^
SyntaxError: invalid syntax 
+0

Tôi cũng nhận thấy điều này và nó thực sự làm tôi khó chịu. Tôi không thích những bất thường ngữ pháp như thế này, ngay cả khi chúng là đường cú pháp đẹp. Nếu tôi muốn có một ngữ pháp kỳ lạ, tôi sẽ lập trình trong perl. – Omnifarious

+0

@Omnifarius: Tôi đánh giá cao tính nhất quán cao (và vì vậy Python nói chung), nhưng đôi parens chỉ là đồng bằng dự phòng. – delnan

+0

@delnan - Chúng không phải. Ví dụ: 'tổng (j cho j, k trong {'a': 1, 'b': 2} .iteritems())'. Làm thế nào là dấu phẩy giữa 'j' và' k' được giải thích, và tại sao? – Omnifarious

Trả lời

5

Tôi chắc chắn đọc python grammar sẽ trả lời câu hỏi đó.

Nếu bạn thích tiếng Anh đơn giản hơn ngữ pháp: PEP-289 giải thích nó.

+7

Ngữ pháp Python, trong khi không gần như là xấu Perl, không dành cho người yếu tim. Câu trả lời ngắn hơn là "có, cú pháp". – delnan

+8

Perl có ngữ pháp không? –

+0

Ngữ pháp sẽ cho bạn biết * rằng * bạn có thể; nó sẽ không cho bạn biết * tại sao * nó được thiết kế theo cách đó. –

Các vấn đề liên quan