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.
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.
Hayır, bu yaygın bir uygulamadır. Sadece sizinkinden çok daha uzun ifadeler için kötü bir stil olarak kabul edilir.
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
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
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 –
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.
Sadece doğruluk testi denen bir işlev göremiyorum. Yan etkileri nerede? – jcollado
Bu "yan etki" ne değil. –
@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