2016-02-05 10 views
9

tôi vô tình đã viết:= + Python điều hành là đúng cú pháp

total_acc =+ accuracy 

thay vì:

total_acc += accuracy 

Tôi tìm kiếm trên mạng và không thể tìm thấy anything. Vì vậy, những gì đã xảy ra, tại sao Python nghĩ rằng tôi có nghĩa là những gì tôi đang gõ?

Máy tính tin tưởng chúng tôi quá nhiều. :)

+2

'total_acc = + accuracy' là' total_acc = + accuracy' – Clodion

+0

Oh nên khi bạn muốn giá trị âm, bạn không làm * (- 1), nhờ @Clodion! Không biết điều đó. – gsamaras

+3

Bản sao có thể có của [Logic liên quan đến việc sử dụng không gian với các toán tử đơn trong Python3] (http://stackoverflow.com/questions/35208351/logic-regarding-the-use-of-spaces-with-unary-operators-in- python3) – zondo

Trả lời

5

Điều này giống như khi bạn làm như total_acc = -accuracy, ngoại trừ số dương thay vì âm. Về cơ bản, nó giống như total_acc = accuracy mặc dù, khi thêm dấu + trước khi giá trị không thay đổi.

Điều này được gọi là toán tử đơn nhất vì chỉ có một đối số (ví dụ: +a) thay vì hai (ví dụ: a+b).

This link giải thích thêm một chút.

2

Nó cho rằng bạn đang làm total_acc = +accuracy, đặt total_acc bằng accuracy. + trước một biến không có giá trị khác làm cho phương thức __pos__ của biến được gọi. Đối với hầu hết các loại, đây là một số nop, nhưng có một số loại nhất định, ví dụ: Decimal triển khai __pos__.

+0

Đúng vậy, nhưng điều gì xảy ra với toán tử '+'? – gsamaras

+3

'+' trước khi một giá trị gọi phương thức '__pos __()' của đối tượng nếu nó có một giá trị. Hầu hết các loại không có phương pháp như vậy, do đó, nó là một no-op. 'Decimal' là một kiểu sử dụng nó; https://stackoverflow.com/questions/16819023/whats-the-purpose-of-the-pos-unary-operator-in-python – kindall

+0

@kindall Huh, tôi không biết điều đó. Tốt để biết, cảm ơn! Tôi sẽ thêm nó vào câu trả lời của tôi. –

7

Nếu bạn quan tâm đến việc bắt loại lỗi này sớm, bạn có thể làm điều đó với phân tích mã tĩnh. Ví dụ, flake8:

$ cat test.py 
total_acc = 0 
accuracy = 10 

total_acc =+ accuracy 
$ flake8 test.py 
test.py:4:12: E225 missing whitespace around operator 

Trong trường hợp này, người ta phàn nàn về không gian thêm sau khi +, nghĩ rằng bạn thực sự có nghĩa là total_acc = +accuracy. Điều này sẽ giúp bạn khám phá vấn đề sớm hơn.

FYI, pylint cũng sẽ bắt được điều đó.

+2

Câu trả lời của bạn thêm * thực sự * một cái gì đó đặc biệt ở đây, bạn xứng đáng có một upvote²! – gsamaras

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