2016-07-07 15 views
5

tôi biết điều hành ternary Python:Đánh giá biến phân

result = a if b else c 

Nhưng nếu a và b là những điều tương tự? Hãy để tôi minh họa cho nó:

tasks = ["foo", "bar"] 
def tasksLeft(): 
    return tasks 

tasks.remove('foo') 
my_tasks = tasksLeft() if tasksLeft() else 'no tasks left' 

Trong một nỗ lực đầu tiên, tasksLeft() sẽ đánh giá là True, vì vậy các nhà điều hành ternary sẽ đánh giá để ["bar",].

tasks.remove('bar') 
my_tasks = tasksLeft() if tasksLeft() else 'no tasks left' 

Trong một nỗ lực thứ hai, tasksLeft() sẽ đánh giá False ([]), vì vậy nó sẽ đánh giá vào chuỗi mặc định.

đang giả thuyết của tôi sẽ là:

if not my_tasks = tasksLeft(): 
    my_tasks = 'no tasks left' 

Vấn đề là giá trị chỉ giao được đánh giá, và nếu nó là False, sau đó gán một giá trị khác nhau.

Rõ ràng đây chỉ là một ví dụ tôi vừa mới đưa ra, và tôi biết nó không phải là cú pháp chính xác, nhưng có cách nào ít lặp đi lặp lại hơn không?

+7

'my_tasks = tasksLeft() hoặc 'không còn nhiệm vụ nào'' – vaultah

+0

ahh, bạn nói đúng, rằng tôi không nghĩ @vaultah. Cảm ơn bạn! –

+0

Bạn có thể đăng nó làm câu trả lời. –

Trả lời

5

Trong Python các toán tử logic trở lại một trong những toán hạng của họ (người đầu tiên có thể được dùng để xác định kết quả của biểu thức tổng thể), vì vậy bạn có thể sử dụng or điều hành:

my_tasks = tasksLeft() or 'no tasks left'