2011-10-15 18 views
5

thể trùng lặp:
Python Ternary OperatorCó '?' Flow Control trong Python?

Có kiểm soát khai thác dòng chảy tương tự như '?' của C/C++ trong python?

Nếu có một đoạn mã tương tự như sau:

return n <= 1 ? n : fibo(n-1) + fibo(n-2) 

Will có một lỗi như thế này:

File "fibonacci.py", line 2 
    return n <= 1 ? n : fibo(n-1) + fibo(n-2) 
       ^
SyntaxError: invalid syntax 
+2

Điều này được gọi là "ternary" –

+5

Nó có thể được gọi là không chính xác; Phải mất ba toán hạng và do đó nó là thứ ba trong cùng một cách mà bổ sung là nhị phân. Nó xảy ra rằng có nhiều toán tử bậc ba trong python hoặc các hậu duệ algol khác. Điều này được xác định duy nhất như trong câu trả lời của phihag như là một "Biểu thức điều kiện" – SingleNegationElimination

Trả lời

12

Vâng, biểu thức điều kiện là available in Python 2.5+:

return n if n <= 1 else fibo(n-1) + fibo(n-2) 
+6

điều cần lưu ý là điều kiện nằm ở giữa phiên bản python này. Ngôn ngữ giống chữ C có '? : 'nhưng python có thông thạo hơn' nếu khác ' – SingleNegationElimination

4

Bạn có thể thử biểu thức ngắn mạch này return n > 1 and fibo(n-1) + fibo(n-2) or n. Trong khi đây không phải là câu lệnh ba, nó là súc tích và thực hiện công việc trong kịch bản này.

+0

Tôi không nghĩ rằng nó hoạt động cho' n == 0' –

+0

@NeilG Cập nhật câu trả lời của tôi. Cảm ơn bạn đã chỉ ra. –