2010-05-21 42 views
16

tôi "vô tình" đi qua cú pháp lạ nhưng giá trị nàyTại sao i ++++++++ i hợp lệ trong python?

i=3 
print i+++i #outputs 6 
print i+++++i #outputs 6 
print i+-+i #outputs 0 
print i+--+i #outputs 6 

(cho mỗi thậm chí không có: các dấu trừ, nó ra 6 khác 0, tại sao?)

Điều này làm bất cứ điều gì hữu ích?

Cập nhật (Đừng mang nó way..I sai tình yêu python): Một trong những nguyên tắc của Python nói Nên có cùng-- và tốt nhất là chỉ có một cách --obvious để làm điều đó. Dường như có vô số cách để làm i + 1

+3

Bạn đã xem qua nó? Trong một cuộc thi viết mã ngu ngốc? – extraneon

+1

-1: Bạn phải giải quyết vấn đề lập trình nào mà đây là giải pháp? Vứt mã đó đi, làm ơn. –

+1

Bạn cần phải làm sạch các mẩu vụn ra khỏi bàn phím của bạn một lần nữa. –

Trả lời

28

Vì Python không có các toán tử C++ hoặc - C, bạn có thể thừa nhận rằng bạn đang phủ nhận hoặc kích hoạt (?) Giá trị trên trái.

Ví dụ: bạn mong đợi điều gì là i + +5?

i=3 
print i + +(+i) #outputs 6 
print i + +(+(+(+i))) #outputs 6 
print i + -(+i) #outputs 0 
print i + -(-(+i)) #outputs 6 

Đáng chú ý, từ Python Grammar Specification, bạn sẽ thấy dòng:

factor: ('+'|'-'|'~') factor | power 

Có nghĩa là một yếu tố trong một biểu hiện có thể là một yếu tố trước bởi +, -, hoặc ~. I E. nó là đệ quy, vì vậy nếu 5 là một yếu tố (đó là vì yếu tố-> power-> NUMBER), thì -5 là một yếu tố và do đó là --5--------5.

5

Dấu cộng được coi là toán tử đơn nhất cho đúng nhất i biến, như trong + (- 3) = -3 hoặc + (+ (+ 3))) = 3. Dấu chỉ bên trái nhiều nhất (cộng hoặc trừ) được phân tách thành nhị phân, vì vậy i +++ i = i + (+ (+ i)), dịch thành i + i = 3 + 3 = 6, trong ví dụ của bạn.

Các biểu thức khác tuân theo nguyên tắc tương tự.

5

Đó nên đọc

print i + (+ (+i)) 

có nghĩa là, dấu hiệu đầu tiên là các nhà điều hành Ngoài ra, những người khác là những dấu hiệu ghi vào

+i 

và (không may)

++i 

được do đó báo cáo hợp lệ.

+2

Tôi thích cái cuối cùng. ++ i là hợp lệ, nó chỉ không làm những gì nó làm trong các ngôn ngữ khác :) – extraneon

+0

Chính xác! (và một chút đáng sợ) – UncleZeiv

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