2013-07-12 35 views
7

Tôi biết nó được tán thành bởi một số, nhưng tôi thích sử dụng toán tử ternary của Python, vì nó làm cho các câu lệnh đơn giản dễ đọc hơn if/else để đọc (tôi nghĩ). Trong mọi trường hợp, tôi đã thấy rằng tôi không thể làm điều này:Toán tử ternary Python không thể trả về nhiều giá trị?

>>> a,b = 1,2 if True else 0,0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

Con đường tôi đã tìm các nhà điều hành ternary hoạt động là nó chủ yếu được xây dựng như sau:

if True: 
    a,b = 1,2 
else: 
    a,b = 0,0 

Có thể ai đó giải thích tại sao mẫu mã đầu tiên của tôi không hoạt động? Và, nếu có, cung cấp một lớp lót để gán nhiều biến có điều kiện?

Trả lời

12

Nó phân tích rằng khi ba giá trị, đó là:

1, 
2 if True else 0, 
0 

Do đó nó trở thành ba giá trị (1,2,0), đó là hơn hai giá trị ở phía bên trái của biểu thức.

Hãy thử:

a,b = (1,2) if True else (0,0) 
+1

Tốt ol' 'hành dấu phẩy có độ ưu tiên thấp hơn ternary có điều kiện' ... Ngay cả các công trình trong C. .. –

+0

Ah, cảm ơn bạn rất nhiều! – Valdogg21

+0

@ Valdogg21 Bạn được chào đón :) – Doorknob

2

Nó chỉ là một vấn đề ưu tiên điều hành. Xem xét:

>>> 1,2 if True else 0,0 
(1, 2, 0) 

Thêm dấu ngoặc đơn khi cần thiết, và bạn sẽ nhận được nó để làm việc:

(1,2) if True else (0,0) 
Các vấn đề liên quan