İfadeler halında çox satırlı ifadələr qoymaq?

Bəzən bir neçə xətt üçün uzun şərtlər pozuram. Bunun ən açıq yolu:

  if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Görmə qabiliyyətinə görə çox cazibədar deyil, aksiya şərtlərlə birləşdirilir. Buna baxmayaraq, bu, düzgün 4-boşluq Python indentini istifadə etmək üçün təbii yoludur.

Hal-hazırda istifadə edirəm:

  if ( cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Amma çox gözəl deyil :-)

Alternativ bir yol təklif edə bilərəmmi?

379
08 окт. Eli Bendersky tərəfindən 08 okt. 2008-10-08 09:19 '08 at 9:19 2008-10-08 09:19
@ 29 cavab

İkinci şərti xəttdə 4 boşluq istifadə etməliyik. Istifadə edin:

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Ayrıca, boşluğun düşündüğünüzden daha esnek olduğunu da unutmayınız:

 if ( cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4' ): do_something if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Hər ikisi də olduqca çirkin olsa da.

Yəqin ki, mötərizəni itirmək ( stil guide , baxmayaraq ki, bu cəzbedici)?

 if cond1 == 'val1' and cond2 == 'val2' and \ cond3 == 'val3' and cond4 == 'val4': do_something 

Ən azı sizə bir fərq verir.

Və ya hətta:

 if cond1 == 'val1' and cond2 == 'val2' and \ cond3 == 'val3' and \ cond4 == 'val4': do_something 

Mən üstünlük verdiyimi düşünürəm:

 if cond1 == 'val1' and \ cond2 == 'val2' and \ cond3 == 'val3' and \ cond4 == 'val4': do_something 

Burada (2010-cu ildən) mötərizələrin istifadə edilməsini tövsiyə edən Style Guide .

417
08 окт. Cavab Harley Holcombe 08 oktyabr tərəfindən verilir . 2008-10-08 09:34 '08 at 9:34 2008-10-08 09:34

Aşağıdakıları sadəcə VƏ və ya VƏ olduğu bir pozğunluq halında tətbiq etdim.

 if all( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ): if any( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ): 
border=0

Bir neçə simvolu tündləşdirir və aydın olur ki, bu vəziyyətdə heç bir incəlik yoxdur.

75
08 окт. Cavab S.Lott 08 oct tərəfindən verilir . 2008-10-08 13:26 '08 saat 13:26 'da 2008-10-08 13:26

Biri burada şaquli boşluqların qorumasını təmin etməlidir! :)

 if ( cond1 == val1 and cond2 == val2 and cond3 == val3 ): do_stuff() 

Bu, hər bir vəziyyəti aydın görünür. Bundan da daha kompleks şərtlərin təmiz ifadəsinə imkan verir:

 if ( cond1 == val1 or ( cond2_1 == val2_1 and cond2_2 >= val2_2 and cond2_3 != bad2_3 ) ): do_more_stuff() 

Bəli, aydınlıq üçün bir az şaquli daşınmaz əmlak ticarət edirik. IMO dəyərindədir.

35
08 окт. Cavab Kevin Little 08 oktyabr tərəfindən verilir . 2008-10-08 17:55 '08 at 5:55 pm 2008-10-08 17:55

Açar sözü and ikinci satırı hərəkət etmə and şərtləri olan dördüncüyü yerinə iki boşluq qoymaq təklif edirəm:

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Bu problemi mənim kodumda həll edirəm. Açar sözü satırdakı ilk söz olaraq, vəziyyəti daha oxunandır və boşluq sayının azaldılması şəraitdən əlavə vəziyyəti fərqləndirir.

16
08 окт. Cavab DzinX 08 oktyabr verilir . 2008-10-08 10:19 '08 at 10:19 2008-10-08 10:19

Burada mənim çox şəxsi yanaşma: uzunmüddətli şərtlər (mənim fikrimcə) məntiqi bir qaytarma funksiyası / metoduna refrakter təklif edən kodun qoxusudur. Məsələn:

 def is_action__required(...): return (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4') 

İndi çox satırlı şərtləri yaxşı bir şəkildə göstərmək üçün bir yol tapmış olsaydım, ehtimalla özlərimlə razı qalaram və refaktoring atlayacağam.

Digər tərəfdən, mənim estetik duyğularımı pozurlarsa, bu refactoring üçün stimuldur.

Beləliklə, mənim qənaətimcə, bir neçə xəttin şərtləri çirkin görünməlidir və bu, onların qarşısını almaq üçün bir təşviqdir.

16
14 янв. Cavab 14 yanvar krawyoti verilir 2011-01-14 13:50 '11 'da 13:50' də 2011-01-14 13:50

Bu yaxşı deyil, amma ...

 allCondsAreOK = (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4') if allCondsAreOK: do_something 
14
08 окт. Federico A. Ramponi tərəfindən verilmiş cavab oktyabr 08 2008-10-08 09:31 '08 at 09:31 2008-10-08 09:31

Qədər böyük bir ifa vəziyyətim olduqda bu üsluba üstünlük verirəm:

 if ( expr1 and (expr2 or expr3) and hasattr(thingy1, '__eq__') or status=="HappyTimes" ): do_stuff() else: do_other_stuff() 
12
08 окт. Cavab Deestan 08 okt verilir . 2008-10-08 11:39 '08 at 11:39 2008-10-08 11:39

PEP 0008 (rəsmi Python stil rəhbərliyi) istinadən dəyərli görünür, çünki bu məsələni təvazökar bir müddətdə şərh edir:

If dövlətin şərti hissəsi bir neçə xətdə yazılmasını tələb etmək üçün kifayət qədər uzun olsa, iki xarakterli bir sözün birləşməsi (yəni if ) plus bir məkan, üstəlik bir açılış bracket sonrakı xətləri üçün təbii 4-boşluq girişi yaradır multiline şərti ifadə. Bu, if təbəqə içərisinə daxil edilmiş bir sıra kodun çökdürülməsi ilə vizual münaqişəyə gətirib çıxara bilər, bu da təbii olaraq 4 yerə qədər geri çəkiləcək. Bu PEP, əgər belə bir şərti strinqin bir if içərisində iç içə bir dəstdən görmə qabiliyyətini necə ayırdığına (və ya) açıq bir mövqe qoymursa. Bu vəziyyətdə etibarlı seçimlər, lakin bunlarla məhdudlaşmır:

 # No extra indentation. if (this_is_one_thing and that_is_another_thing): do_something() # Add a comment, which will provide some distinction in editors # supporting syntax highlighting. if (this_is_one_thing and that_is_another_thing): # Since both conditions are true, we can frobnicate. do_something() # Add some extra indentation on the conditional continuation line. if (this_is_one_thing and that_is_another_thing): do_something() 

Yuxarıdakı kotirovkada "məhdudlaşdırılmayan" qeydləri; stil kitabçasında təklif olunan yanaşmalara əlavə olaraq, bu suala təklif olunan bəzi digər cavablar da qəbul edilə bilər.

6
05 июля '15 в 17:15 2015-07-05 17:15 Cavab, Mark Amery tərəfindən 05 iyul '17: 15 saat 17:15' də verilir

Mən təəccübləndim ki, mənim tercih etdiyim həllini görmürəm,

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

Çünki and bir açar söz olduğundan, mənim redaktor tərəfindən vurğulanır və onun altında do_something fərqli görünür.

4
14 янв. Cavab 14 yanvarda Marius Gedminas tərəfindən verilir . 2011-01-14 17:50 '11 at 17:50 2011-01-14 17:50

Mən bunu edirəm, xatırlayıram ki, "hər şey" və "hər" hər şey yinelenir, buna görə siyahıya uzun bir vəziyyət qoyur və "hər kəsə" işi edək.

 condition = [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] if all(condition): do_something 
4
19 нояб. Cavab 19 noyabr tarixində zkanda verilir. 2014-11-19 06:34 '14 saat 06:34 'da 2014-11-19 06:34

@ Krawyoti nə dedi əlavə ... Uzun qoxu şərtləri, onlar oxumaq çətin və anlamaq çətindir, çünki. Bir funksiyanı və ya dəyişəndən istifadə kodu daha dəqiq edir. Python'da, mən şaquli yerdən istifadə etmək, parantezləri əlavə etmək və lövhə operatorlarını hər bir xəttin başlanğıcında yerləşdirməyi üstün tutmaq üçün üstünlük verirəm.

 conditions_met = ( cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4' ) if conditions_met: do_something 

Şərtlər bir while çox dəfə qiymətləndirilməlidirsə, yerli funksiyanı istifadə etmək daha yaxşıdır.

3
19 янв. Cavab 19 yanvarda Apalala tərəfindən verilir . 2011-01-19 23:53 '11 11:53 pm 2011-01-19 23:53

Sadə və sadə, həmçinin pep8 çeklərini keçirir:

 if ( cond1 and cond2 ): print("Hello World!") 

Son vaxtlarda allany funksiyanı üstün tuturam, çünki nadir hallarda, Və Və ya müqayisə, mən yaxşı işləyirəm və yaradılanların anlayışı ilə erkən başlamamışam.

 if all([ cond1, cond2, ]): print("Hello World!") 

Yalnız bir döyüşçüyə daxil olmağı unutmayın! N-arqumentlərindən keçmək etibarsızdır.

Qeyd: any bir müqayisə ilə müqayisədə or any çox müqayisə and eşleşir.


Bu, mükəmməl generatorun konsepsiyası ilə birləşir, məsələn:

 # Check if every string in a list contains a substring: my_list = [ 'a substring is like a string', 'another substring' ] if all('substring' in item for item in my_list): print("Hello World!") # or if all( 'substring' in item for item in my_list ): print("Hello World!") 

Daha ətraflı: generatoru anlamaq

3
24 нояб. cavab Nov. 24-də ThorSummoner tərəfindən verilir 2014-11-24 10:44 '14 da 10:44 2014-11-24 10:44

"hamısı" və "hər" bir növü eyni şərtlər üçün yaxşıdır. Ancaq hər zaman bütün şərtləri qiymətləndirirlər. Bu nümunədə göstərildiyi kimi:

 def c1(): print " Executed c1" return False def c2(): print " Executed c2" return False print "simple and (aborts early!)" if c1() and c2(): pass print print "all (executes all :( )" if all((c1(),c2())): pass print 
2
08 окт. Anders Waldenborg tərəfindən verilmiş cavab Oct 08 2008-10-08 13:38 '08 at 13:38 pm 2008-10-08 13:38

(Mən müəyyən identifikatorları bir az dəyişdilər, çünki sabit genişlikli adlar real kodun nümayəndəsi deyil - ən azından rast gəldiyim gerçək kod deyil - və nümunə oxunaqlığına zidd olacaq).

 if (cond1 == "val1" and cond22 == "val2" and cond333 == "val3" and cond4444 == "val4"): do_something 

Bu, "və" və "və ya" (onlar ikinci xəttdə birinci olduqları vacibdir) üçün yaxşı işləyir, lakin daha çox digər uzunmüddətli şərtlər üçün. Xoşbəxtlikdən, köhnə, daha tez-tez rast gəlinən bir vəziyyətdir, ikincisi tez-tez asanlıqla vaxt dəyişkənliyi ilə yenidən yazılır. (Ümumiyyətlə çətin deyil, lakin qısa bir dövr saxlamaq üçün çətin və ya daha az açıq / oxunaqlı ola bilər "və" / "və ya" yazarkən).

Bu soruyu C ++ blogunuzdan yazdığımdan sonra C ++ üslubunun eyni olduğunu əlavə edəcəyəm:

 if (cond1 == "val1" and cond22 == "val2" and cond333 == "val3" and cond4444 == "val4") { do_something } 
2
14 янв. Cavab Fred Nurk tərəfindən verilir . 14 yanvar. 2011-01-14 11:33 '11 'də 11:33' də 2011-01-14 11:33

Vəziyyətlə bədən arasında əlavə boş bir xəta qoysaq və qalanını kanonik şəkildə qurarsam nə olar?

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 

ps mən həmişə boşluqlar deyil, nişanlar istifadə edirəm; Mən ince ayarlayamıyorum ...

2
09 окт. Federico A. Ramponi tərəfindən verilmiş cavab 09 oktyabr 2008-10-09 05:45 '08 saat 05:45 'da 2008-10-09 05:45

Şəxsən, mən uzun müddət ifa dəyərlərinə əlavə etmək istərdim. Müvafiq bir nümunə tapmaq üçün kodu axtarmaq lazımdır, amma burada ağla gələn ilk nümunədir: deyirəm, mən bir çox dəyişkənliyə bağlı olaraq müəyyən bir səhifəni göstərmək istədiyim bir yerdən qəribə bir məntiqli məntiqə qaçdım.

Rus dili: "Qeydə alınmış istifadəçi administrator müəllim deyilsə, ancaq adi bir müəllim və tələbə deyilsə ..."

 if not user.isAdmin() and user.isTeacher() and not user.isStudent(): doSomething() 

Əlbəttə ki, bu yaxşı görünə bilər, ancaq bəyanatlar çox iş olsa belə oxuyur. Etiketlemeye dair məntiq təyin etdiyimiz kimi mənalıdır. "Etiket" əslində bir dəyişənin adıdır:

 displayTeacherPanel = not user.isAdmin() and user.isTeacher() and not user.isStudent() if displayTeacherPanel: showTeacherPanel() 

Bu ağılsızlıq görünə bilər, ancaq müəllim heyətini göstərdiyinizdə və ya istifadəçi bu digər spesifik default panelə daxil olduqda yalnız bir element göstərmək istədiyinizdə başqa şərt ola bilər:

 if displayTeacherPanel or user.canSeeSpecialPanel(): showSpecialPanel() 

Mantığınızı saxlamaq və etiketləmək üçün dəyişənləri istifadə etmədən yuxarıda göstərilən vəziyyəti yazmağa çalışın və yalnız çox çirkli, oxumaq çətin bir mantıksal bəyanat almayacaqsınız, ancaq yalnız özünüzü təkrarlayırsınız. Münasib istisnalar olsa da, unutmayın: özünüzü təkrar etməyin (DRY).

2
07 марта '13 в 9:24 2013-03-07 09:24 Cavab rgenito 07 mart '13 də saat 09:24 'da verilir 2013-03-07 09:24

Bunu iki xətaya ayırmaq olar.

 total = cond1 == 'val' and cond2 == 'val2' and cond3 == 'val3' and cond4 == val4 if total: do_something() 

Və ya hətta bir anda bir şərt əlavə. Beləliklə, ən azı, bu mess ifdan ayırır.

1
04 авг. Cavab SarcasticSully 04 aug tərəfindən verilir . 2016-08-04 22:30 '16 saat 10:30 'da 2016-08-04 22:30

Tamamlama üçün bir neçə digər təsadüfi fikirdir. Əgər onlar sizin üçün işləyirlərsə, onlardan istifadə edin. Əks halda, ehtimal ki, başqa bir şey sınamalısınız.

Bunu bir lüğət ilə də edə bilərsiniz:

 >>> x = {'cond1' : 'val1', 'cond2' : 'val2'} >>> y = {'cond1' : 'val1', 'cond2' : 'val2'} >>> x == y True 

Bu parametr daha mürəkkəbdir, ancaq faydalı tapa bilərsiniz:

 class Klass(object): def __init__(self, some_vars): #initialize conditions here def __nonzero__(self): return (self.cond1 == 'val1' and self.cond2 == 'val2' and self.cond3 == 'val3' and self.cond4 == 'val4') foo = Klass() if foo: print "foo is true!" else: print "foo is false!" 

Bu sizin üçün işləməyəcəyini bilmirəm amma bu, hesab etmək üçün başqa bir seçimdir. Başqa bir yoldur:

 class Klass(object): def __init__(self): #initialize conditions here def __eq__(self): return (self.cond1 == 'val1' and self.cond2 == 'val2' and self.cond3 == 'val3' and self.cond4 == 'val4') x = Klass(some_values) y = Klass(some_other_values) if x == y: print 'x == y' else: print 'x!=y' 

Son ikisini sınamış deyiləm, amma siz getmək istəsəniz, getmək üçün kifayət qədər konsepsiya olmalıdır.

(Və yalnız bir dəfə, rekord üçün, siz əvvəlində təqdim etdiyiniz metodu daha yaxşı istifadə edərdiniz.) Bir çox yerdə müqayisə etsəniz, bu metodlar kifayət qədər okunabilirliyi artırar, belə ki, belə ki, onlar hackerlardır.)

1
08 окт. Jason Baker- ə cavab Oct 08 2008-10-08 20:26 '08 at 8:26 pm 2008-10-08 20:26

Mən adətən bunu edirəm:

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4' ): do_something 

Beləliklə, bağlanma nöqtəsi və kolon əyani olaraq dövlətimizin sonunu ifadə edir.

1
01 авг. cavab tomekwi 01 aug verilir . 2014-08-01 20:53 '14 saat 20:53 2014-08-01 20:53

Bunu etmək üçün layiqli bir yol tapmaq üçün mübarizə aparırdım, buna görə bir fikirlə gəldim (gümüş güllə deyil, çünki bu əsasən dadlıq məsələidir).

 if bool(condition1 and condition2 and ... conditionN): foo() bar() 

Mən bu həlldə bir çox üstünlükləri görürəm, yəni gördüklərimə görə, yəni indentdə (bool) tam olaraq 4 əlavə boşluq əldə edər, bütün şərtlər dikey olaraq sıralanır və if ifadəsinin bədəni açıq . Bu da Boole operatorlarının qısa dövrələrinin qiymətləndirilməsinin üstünlüklərini saxlayır, lakin əlbəttə ki, əsasən heç bir şey etməyən bir funksiyanı çağırır. Öz arqumentini qaytaran hər hansı funksiyanı bool əvəzinə burada istifadə edə biləcəyini iddia edə bilərsən, lakin dediyim kimi, bu, yalnız bir fikirdir və bu da son dərəcə dadadır.

Funny, buna yazdığım və "problem" haqqında düşündüyümdən, funksiyanı çağırmaqdan ötrü bir şeyi aradan qaldıran başqa bir fikirlə gəldim. Əlavə cüt parantezlərdən istifadə edərək mürəkkəb bir vəziyyət təqdim edəcəyik? Operatorun bədəninə nisbətən yaxşı 2 tərəfli girinti vermək üçün 2 daha deyin. Məsələn:

 if (((foo and bar and frob and ninja_bear))): do_stuff() 

Mən də buna bənzəyirəm, çünki ona baxdığınız zaman zəng dərhal başınıza çalar: "Hey, bu, çətin bir şeydir!". Bəli, mən bilirəm ki, parantezlər oxunmazlığa kömək etmir, amma bu şərtlər kifayət qədər nadir hallarda görünməlidir və göründüyü zaman onları dayandırmaq və oxumaq lazımdır (çünki onlar kompleksdir ).

Hər halda, burada görmədim ki, iki cümlə daha. Ümid edirəm bu kimsə kömək edir :)

1
03 дек. Cavab El Ninja Trepador tərəfindən verilir Dek 03 2014-12-03 22:19 '14 at 22:19 2014-12-03 22:19

əgər əgər bizim və başqa şərtimiz daxilində bir neçə bəyanat verməlidirsə, yaza biləcəyimizdən aşağıda göstərildiyi kimi. Hər dəfə içərisində onlardan biri ilə bir nümunə var.

Mənim üçün çalışdığınız üçün təşəkkür edirik.

 #!/usr/bin/python import sys numberOfArgument =len(sys.argv) weblogic_username ='' weblogic_password = '' weblogic_admin_server_host ='' weblogic_admin_server_port ='' if numberOfArgument == 5: weblogic_username = sys.argv[1] weblogic_password = sys.argv[2] weblogic_admin_server_host =sys.argv[3] weblogic_admin_server_port=sys.argv[4] elif numberOfArgument <5: print " weblogic UserName, weblogic Password and weblogic host details are Mandatory like, defalutUser, passwordForDefaultUser, t3s://server.domainname:7001 ." weblogic_username = raw_input("Enter Weblogic user Name") weblogic_password = raw_input('Enter Weblogic user Password') weblogic_admin_server_host = raw_input('Enter Weblogic admin host ') weblogic_admin_server_port = raw_input('Enter Weblogic admin port') #enfelif #endIf 
0
06 дек. Cavab 06 dekabrda Karo La tərəfindən verilir . 2015-12-06 15:27 '15 at 15:27 2015-12-06 15:27

Mən adətən istifadə edirəm:

Siyahıdakı şərtlərinizi yığın, sonra da bunu et. kimi:

 if False not in Conditions: do_something 
0
09 июня '10 в 12:23 2010-06-09 12:23 Cavab psihodeliya 09 iyun '12 saat 12:23 'də verildi 2010-06-09 12:23

Hesab edirəm ki, @zkanda həlli yüngül bir bükülmə ilə gözəl olardı. Sizin şərtləriniz və dəyərləriniz öz siyahılarında olsaydı, müqayisə etmək üçün siyahı fikirini istifadə edə bilərsiniz, bu şərtləri şərtləri / dəyər cütləri əlavə etmək üçün daha ümumi edir.

 conditions = [1, 2, 3, 4] values = [1, 2, 3, 4] if all([c==v for c, v in zip(conditions, values)]): # do something 

Bu cür yazmaq istərdimsə, oxumaq üçün yazmalıyım:

 if (condition1==value1) and (condition2==value2) and \ (condition3==value3) and (condition4==value4): 

iand operator ilə başqa bir həll iand :

 proceed = True for c, v in zip(conditions, values): proceed  c==v if proceed: # do something 
0
21 июля '17 в 16:03 2017-07-21 16:03 Cavab ryanjdillon tərəfindən verilir 21 İyul 21 'da 16:03 2017-07-21 16:03
  if cond1 == 'val1' and \ cond2 == 'val2' and \ cond3 == 'val3' and \ cond4 == 'val4': do_something 

və ya aydındırsa:

  if cond1 == 'val1'\ and cond2 == 'val2'\ and cond3 == 'val3'\ and cond4 == 'val4': do_something 

Bu vəziyyətdə indentin 4 ədəd bir çoxluğu olması lazım olduğu mənada heç bir məna daşımır. "Açılış məhdudlaşdırıcı ilə uzlaşma" bax:

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=Indentation#Indentation

0
13 марта '12 в 14:13 2012-03-13 14:13 Cavab Dima Tisnek tərəfindən 13 Mart 2012 tarixində saat 14: 13-də verilir

If ifadəsi üçün çox şərti ifadələr verən bütün respondentlər problem kimi çirkin olur. Eyni əməl edərək bu problemi həll etmirsiniz.

Hətta PEP 0008 cavabını itələyir.

Burada daha oxunaqlı bir yanaşma var.

 condition = random.randint(0, 100) # to demonstrate anti_conditions = [42, 67, 12] if condition not in anti_conditions: pass 

Mənim sözlərimi yeməyimi istəyirsiniz? Bir neçə konvensiyaya ehtiyac duyduğuma görə məni inandırsın və mən tam olaraq onu çap etdirəcəyəm və zövqünüz üçün yeyin.

0
17 июня '17 в 9:16 2017-06-17 09:16 Cavab 17 iyun, '17 'də 9:16' də 2017-06-17 09:16 'də verilir

Mən uzunmüddətli şərtlərim olduqda, tez-tez qısa kodlu bir bədənim var. Bu vəziyyətdə, mən sadəcə iki dəfə vücudumu geri çəkirəm, beləliklə:

 if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): do_something 
0
22 сент. Cavab xorsyst verilir 22 Sep. 2011-09-22 11:31 '11 'da 11:31' də 2011-09-22 11:31

Bu mövzu köhnə olduğunu bilirəm, amma Python 2.7 kodu var və PyCharm (4.5) hələ də bu vəziyyətdən şikayət edir:

 if foo is not None: if (cond1 == 'val1' and cond2 == 'val2' and cond3 == 'val3' and cond4 == 'val4'): # some comment about do_something do_something 

PEP8 xəbərdarlığı, "növbəti mantıksal xətt kimi eyni çınqıl ilə görmə qabiliyyətli bir xətt" olsa da, faktiki kod tamamilə yaxşıdır? Bu "həddindən artıq girinti" deyildir?

... Python'un gülləə çarptığını və yalnız kıvırcık qolları ilə uzaqlaşmaq istədikləri zamanlar var. Təsadüfi yanlış girişdən ötəri illər ərzində yanlışlıqla neçə səhv gətirildiyini təəccüb edirəm ...

0
29 нояб. Cavab SMGreenfield tərəfindən verilir . 2016-11-29 20:12 '16 saat 20:12 'də 2016-11-29 20:12

Burada başqa bir yanaşma var:

 cond_list = ['cond1 == "val1"','cond2=="val2"','cond3=="val3"','cond4=="val4"'] if all([eval(i) for i in cond_list]): do something 

Bundan əlavə, əgər if hesabatını dəyişdirmədən sadəcə başqa bir şərt əlavə edərkən başqa bir vəziyyət əlavə etmək asanlaşdırır:

 cond_list.append('cond5=="val5"') 
0
17 окт. cavab 17 oktyabr istifadəçi1487551 tərəfindən verilir . 2014-10-17 01:08 '14 at 1:08 2014-10-17 01:08