2012-01-05 20 views
17

Được coi là kiểu xấu để gán giá trị cho các biến như thế này?Bài tập có "hoặc" trong python

x = "foobar" or None 
y = some_variable or None 

Trong ví dụ trên, x nhận giá trị 'foobar'.

+0

Tôi không thấy bất kỳ chức năng nào được gọi là kiểm tra sự thật. Các tác dụng phụ ở đâu? – jcollado

+3

Đó không phải là "tác dụng phụ". –

+0

@jcollado: Tôi không chỉ định boolean cho x và y. Giá trị được gán là mục ngắn mạch đầu tiên là True. Trường hợp đầu tiên là "foobar", và trường hợp thứ hai phụ thuộc vào giá trị boolean của some_variable. – TheOne

Trả lời

13

Không, đó là thông lệ phổ biến. Nó chỉ được coi là phong cách xấu cho các biểu thức dài hơn đáng kể so với bạn.

+1

Nó được coi là một anti-pattern trong JavaScript. Nó không đọc tự nhiên để không được khởi tạo và bạn không thể gán các giá trị giả. – diginoise

3

Tôi cũng cảm thấy một chút không thoải mái khi sử dụng loại biểu thức đó. Trong Learning Python 4ed nó được gọi là một "hành vi hơi bất thường". Sau Đánh dấu Lutz nói:

... nó hóa ra là một mô hình mã hóa khá phổ biến bằng Python: để chọn một đối tượng rỗng từ trong một bộ kích thước cố định, chỉ cần chuỗi chúng lại với nhau trong một hoặc biểu hiện. Ở dạng đơn giản, đây cũng là thường được sử dụng để chỉ định mặc định ...

Thực tế, chúng tạo ra các biểu thức một dòng ngắn gọn giúp loại bỏ nhiễu dòng từ mã.
Hành vi này là cơ sở cho một dạng của if/else điều hành ternary:

A = Y if X else Z 
+0

Nhưng nó có thể gây ra lặp lại một tham số dài trong đó 'Y = X'. Ví dụ: 'A = my_main_dictionary.my_sub_dictionary.my_value nếu my_main_dictionary.my_sub_dictionary.my_value else None' hoặc' A = my_main_dictionary.my_sub_dictionary.my_value hoặc None' –

9

Sự nguy hiểm chính làm một cái gì đó như thế này là khả năng đó (trong trường hợp thứ hai) some_variable là False nhưng không None (số nguyên 0 chẳng hạn) và bạn không muốn kết thúc bằng y bằng Không trong trường hợp đó.

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