2012-05-25 30 views
16

Có bit sau mã Python trong một dự án tôi phải duy trì:Dấu cộng làm gì trước một biến trong Python?

# If the `factor` decimal is given, compute new price and a delta 
factor = +factor.quantize(TWOPLACES) 
new_price = +Decimal(old_price * factor).quantize(TWOPLACES) 
delta = new_price - old_price 

Câu hỏi đặt ra ở đây là mục đích của + trước một biến.

Tài liệu Python call it nhà điều hành cộng đơn nhất, "tạo đối số dạng số không thay đổi". Nó có thể được loại bỏ một cách an toàn sau đó?

(Ngẫu nhiên, mã được viết bởi tôi một thời gian trước đây, hy vọng tôi đã học được bài học - nó sẽ không là câu hỏi nếu các bài kiểm tra tồn tại, hoặc nếu sử dụng cộng đơn trên thập phân đã được làm rõ trong các bình luận .)

+2

Điều gì sẽ xảy ra khi bạn xóa nó? –

+1

Không có gì rõ ràng, nhưng vì nó đề cập đến thông tin số nhạy cảm (giá sản phẩm) nên biết chắc chắn hơn. Than ôi, thử nghiệm có liên quan bị thiếu. – Tony

+0

Tôi chắc chắn có một số mục đích cho nó. Tôi không biết câu trả lời, nhưng tôi đã tò mò nếu có một sự khác biệt ngay lập tức, đáng chú ý. –

Trả lời

18

Dấu cộng đó phụ thuộc vào những gì nó được xác định là do kết quả của biểu thức đó (phương thức __pos__() của đối tượng đó được gọi). Trong trường hợp này, đó là đối tượng Decimal và cộng số đơn nhất tương đương với phương thức plus(). Về cơ bản, nó được sử dụng để áp dụng ngữ cảnh hiện tại (độ chính xác, làm tròn, vv) mà không thay đổi dấu của số. Tìm kiếm một số điện thoại setcontext() hoặc localcontext() gọi ở nơi khác để xem ngữ cảnh là gì. Để biết thêm thông tin, see here.

Điểm cộng đơn nhất không được sử dụng thường xuyên, vì vậy không ngạc nhiên khi việc sử dụng này không quen thuộc. Tôi nghĩ mô-đun decimal là mô-đun chuẩn duy nhất sử dụng nó.

+0

Cảm ơn! Có thực sự tồn tại một cuộc gọi 'setcontext (Context (rounding = ROUND_UP))' ở đầu mô-đun. – Tony

2

Tôi đã gặp phải vấn đề tương tự khi tôi giả định sai rằng Python phải hỗ trợ toán tử tăng dần C (++); nó không! Thay vào đó, nó áp dụng toán tử dấu cộng (+) hai lần! Mà không có gì hai lần, tôi sớm học được. Tuy nhiên, vì "++ n" có vẻ hợp lệ ... không bị gắn cờ là lỗi cú pháp ... Tôi đã tạo ra một lỗi khủng khiếp cho bản thân mình.

Vì vậy, trừ khi bạn xác định lại những gì nó làm, unary + thực sự không làm gì cả. Unary - thay đổi từ dương sang âm và ngược lại, đó là lý do tại sao "--n" cũng không được gắn cờ là lỗi cú pháp nhưng cũng không có gì.

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