2011-12-14 2 views
16

Có một phiên bản Python trong các cách sau if-else tuyên bố trong C++ hoặc tuyên bố tương tự như thế này:Python tuyên bố ngắn 'if-else'

int t = 0; 
    int m = t==0?100:5; 
+0

bản sao có thể có của [python? (điều hành/ternary) nhà điều hành cho các bài tập] (http://stackoverflow.com/questions/3091316/python-conditional-ternary-operator-for-assignments) –

+0

có thể trùng lặp của [Python Ternary Operator] (http: // stackoverflow. com/questions/394809/python-ternary-operator) – kay

Trả lời

38
m = 100 if t == 0 else 5 # Requires Python version >= 2.5 
m = (5, 100)[t == 0]  # Or [5, 7][t == 0] 

Cả hai dòng trên sẽ gây ra điều tương tự.

Dòng đầu tiên sử dụng phiên bản Python của "toán tử ba năm" có sẵn kể từ phiên bản 2.5, mặc dù tài liệu Python đề cập đến nó là Conditional Expressions.

Dòng thứ hai là một chút hack để cung cấp chức năng nội tuyến theo nhiều cách (quan trọng) tương đương với ?: bằng nhiều ngôn ngữ khác (chẳng hạn như CC++).


Tài liệu của Python - 5.11. Conditional Expressions

+0

Tôi tìm thấy cách viết tắt này "m = (5, 100) [t == 0]" hơi lạ một chút về mặt định vị giá trị, nhưng nó hoạt động tho –

7
t = 0 
if t == 0: 
    m = 100 
else: 
    m = 5 

Đẹp tốt hơn là xấu xí.
Rõ ràng là tốt hơn là ẩn.
Đơn giản hơn là phức tạp.

Từ PEP 20.

Hoặc nếu bạn thực sự, thực sự phải (công trình bằng Python> = 2.5):

t = 0 
m = 100 if t == 0 else 5 
+1

-1. Toán tử bậc ba là * ít xấu xí hơn * dài nếu cho các phép toán đơn giản như thế này, khá rõ ràng và * cách * đơn giản hơn. Dogma là xấu xí. – naught101

13

Các cấu trúc bạn đang đề cập đến được gọi là ternary operator. Python có một phiên bản của nó (kể từ phiên bản 2.5), như thế này:

x if a > b else y 
3

Ngoài ra còn có:

m = t==0 and 100 or 5 

Từ 0 là một giá trị falsy, chúng ta có thể viết:

m = t and 5 or 100 

này tương đương với một trong những đầu tiên .