2012-01-05 18 views
17

Bu gibi değişkenlere değer atamak kötü bir stil olarak kabul edilir mi?Python'da "veya" ile atama

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

Yukarıdaki örnekte, x 'foobar' değerini alır.

+0

Sadece doğruluk testi denen bir işlev göremiyorum. Yan etkileri nerede? – jcollado

+3

Bu "yan etki" ne değil. –

+0

@jcollado: Ben x ve y bir boole atamadım. Atanan değer, True olan ilk kısa devre olmuş öğedir. İlk durum "foobar", ve ikincisi bazı değişkenlerin boolean değerine bağlıdır. – TheOne

cevap

13

Hayır, bu yaygın bir uygulamadır. Sadece sizinkinden çok daha uzun ifadeler için kötü bir stil olarak kabul edilir.

+1

JavaScript'te bir anti-pattern olarak kabul edilir. Doğal olarak araştırılmamış olarak okunmaz ve yanlış değerler atayamazsınız. – diginoise

3

Ayrıca bu tür ifadeleri kullanarak biraz rahatsız hissediyorum. Python 4ed Öğrenme'de "biraz alışılmadık davranış" olarak adlandırılır. ilerleyen Mark Lutz diyor ki:

... o Python oldukça yaygın kodlama paradigma olarak çıkıyor: onları birlikte bir Or, sabit boyutlu seti arasından sadece dize boş olmayan bir nesneyi seçmek için ifadesi. daha basit formda, bu

Aslında, onlar kodundan hat gürültüsünü ortadan kaldırmak için yardımcı özlü tek satırlık ifadeler üretmek ... ayrıca yaygın bir varsayılan belirtmek için kullanılır olduğunu.

A = Y if X else Z 
+0

Ancak, Y = X 'nin uzun bir parametreyi tekrarlamasına sebep olabilir. Örneğin: "A = my_main_dictionary.my_sub_dictionary.my_value" my_main_dictionary.my_sub_dictionary.my_value else "veya" A = my_main_dictionary.my_sub_dictionary.my_value veya None "ise –

9

böyle bir şey yaptığını birincil tehlike (ikinci durumda) imkanı olduğunu some_variable False ancak hiçbiri (geçerli:
Bu davranış eğer/else üçlü operatör biçimi için temel oluşturur 0, örneğin) ve bu durumda y Yok'a eşit olmak istemezsiniz.