Stylizacja warunków wielowierszowych w wyrażeniach 'if'? [zamknięte]
Chcesz poprawić to pytanie? zaktualizuj pytanie, aby mogło być odpowiedź z faktami i cytatami przez edytując ten post .
Zamknięte 10 miesięcy temu .
Popraw to pytanieCzasami łamię długie warunki w if
s na kilka linii. Najbardziej oczywistym sposobem na to jest:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Nie jest zbyt atrakcyjna wizualnie, ponieważ akcja mieszają się z warunkami. Jest to jednak naturalny sposób przy użyciu poprawnego wcięcia Pythona 4 spacji.
Na razie używam:
if ( cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Ale to nie jest zbyt ładne. :-)
Czy możesz polecić alternatywny sposób?
30 answers
Nie musisz używać 4 spacji w drugiej linii warunkowej. Może użyć:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Również, nie zapominaj, że białe znaki są bardziej elastyczne niż mogłoby się wydawać:
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
Oba są dość brzydkie.
Może stracić nawiasy ( Style Guide zniechęca to jednak)?
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and cond4 == 'val4':
do_something
To przynajmniej daje pewne zróżnicowanie.
Lub nawet:
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
Chyba wolę:
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
Oto Style Guide , który (od 2010 roku) zaleca stosowanie nawiasów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-27 13:32:28
Uciekłem się do następującego przypadku, w którym jest po prostu I ' s or or.
if all( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
if any( [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4'] ):
To ogoli kilka znaków i daje do zrozumienia, że nie ma subtelności w tym stanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 10:26:48
ktoś musi walczyć z używaniem pionowych białych znaków tutaj! :)
if ( cond1 == val1
and cond2 == val2
and cond3 == val3
):
do_stuff()
To sprawia, że każdy warunek jest wyraźnie widoczny. Umożliwia także czystsze wyrażanie bardziej złożonych warunków:
if ( cond1 == val1
or
( cond2_1 == val2_1
and cond2_2 >= val2_2
and cond2_3 != bad2_3
)
):
do_more_stuff()
Tak, wymieniamy trochę pionowych nieruchomości dla jasności. Warto IMO.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 14:55:02
Preferuję ten styl, gdy mam strasznie duży if-warunek:
if (
expr1
and (expr2 or expr3)
and hasattr(thingy1, '__eq__')
or status=="HappyTimes"
):
do_stuff()
else:
do_other_stuff()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-06 16:16:45
Oto moje bardzo osobiste zdanie: long conditions to (moim zdaniem) zapach kodu sugerujący refaktoryzację w funkcję/metodę zwracającą boolean. Na przykład:
def is_action__required(...):
return (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4')
Teraz, gdybym znalazł sposób, aby Warunki wieloliniowe wyglądały dobrze, prawdopodobnie byłbym zadowolony z ich posiadania i pominąłbym refaktoryzację.
[1]}z drugiej strony, zakłócanie mojego zmysłu estetycznego działa jako bodziec do refaktoryzacji.Mój wniosek jest więc taki, że wiele linii warunki powinny wyglądać brzydko i jest to zachęta do ich unikania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 12:42:55
To nie poprawia się tak bardzo, ale...
allCondsAreOK = (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4')
if allCondsAreOK:
do_something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 06:39:00
Proponuję przenieść słowo kluczowe and
do drugiej linii i wciąć wszystkie linie zawierające Warunki z dwoma spacjami zamiast czterech:
if (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4'):
do_something
Tak właśnie rozwiązuję ten problem w kodzie. Posiadanie słowa kluczowego jako pierwszego słowa w linii sprawia, że warunek jest o wiele bardziej czytelny, a zmniejszenie liczby spacji dodatkowo odróżnia warunek od akcji.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 07:19:09
Wydaje się, że warto zacytować PEP 0008 (oficjalny przewodnik stylu Pythona), ponieważ komentuje ten problem skromnie:
Gdy część warunkowa instrukcji
if
- jest wystarczająco długa, aby wymagać, aby była zapisywana w wielu wierszach, warto zauważyć, że kombinacja dwuznakowego słowa kluczowego (tj.if
) plus pojedyncza spacja plus nawias otwierający tworzy naturalne 4-spacyjne wcięcie dla kolejnych wierszy wielowierszowego warunkowego. To może tworzy wizualny konflikt z wciętym pakietem kodu zagnieżdżonym wewnątrz instrukcjiif
-, która również naturalnie byłaby wcięta do 4 spacji. Ten PEP nie zajmuje jednoznacznego stanowiska co do sposobu (lub czy) dalszego wizualnego odróżnienia takich linii warunkowych od zagnieżdżonego pakietu wewnątrz instrukcjiif
-. Dopuszczalne opcje w tej sytuacji obejmują, ale nie są ograniczone do:# 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()
Zwróć uwagę na "nie ograniczone do" w cytacie powyżej; poza podejściami sugerowanymi w stylu przewodnik, niektóre z tych sugerowanych w innych odpowiedziach na to pytanie są również dopuszczalne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-05 14:15:27
Oto co robię, pamiętaj, że " wszystkie "i" dowolne "akceptują iterowalne, więc po prostu umieszczam długi warunek na liście i pozwalam "wszystkim" wykonać pracę.
condition = [cond1 == 'val1', cond2 == 'val2', cond3 == 'val3', cond4 == 'val4']
if all(condition):
do_something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-19 03:34:33
Dodając do tego, co powiedział @ krawyoti... Długie warunki pachną, ponieważ są trudne do odczytania i trudne do zrozumienia. Użycie funkcji lub zmiennej sprawia, że kod jest jaśniejszy. W Pythonie wolę używać pionowych spacji, zamykać nawiasy i umieszczać operatory logiczne na początku każdej linii, aby wyrażenia nie wyglądały jak "pływające".
conditions_met = (
cond1 == 'val1'
and cond2 == 'val2'
and cond3 == 'val3'
and cond4 == 'val4'
)
if conditions_met:
do_something
Jeśli warunki muszą być ocenione więcej niż raz, jak w pętli while
, to najlepiej jest użyć funkcji lokalnej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-19 20:53:39
Dziwi mnie, że nie widzę mojego preferowanego rozwiązania.]}
if (cond1 == 'val1' and cond2 == 'val2'
and cond3 == 'val3' and cond4 == 'val4'):
do_something
Ponieważ and
jest słowem kluczowym, zostaje ono podświetlone przez mojego redaktora i wygląda wystarczająco inaczej niż do_something pod nim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 14:50:50
Osobiście lubię dodawać znaczenie długim wypowiedziom if. Musiałbym przeszukiwać kod, aby znaleźć odpowiedni przykład, ale oto pierwszy przykład, który przychodzi mi na myśl: powiedzmy, że natrafiłem na jakąś dziwaczną logikę, w której chcę wyświetlić określoną stronę w zależności od wielu zmiennych.
Angielski: "jeśli zalogowany użytkownik nie jest nauczycielem administratora, ale jest tylko zwykłym nauczycielem, a sam nie jest uczniem..."
if not user.isAdmin() and user.isTeacher() and not user.isStudent():
doSomething()
Jasne, że to może wyglądać dobrze, ale czytanie te, jeśli wypowiedzi to dużo pracy. Może przypiszemy logikę etykiecie, która ma sens. "Label" jest właściwie nazwą zmiennej:
displayTeacherPanel = not user.isAdmin() and user.isTeacher() and not user.isStudent()
if displayTeacherPanel:
showTeacherPanel()
Może to wydawać się głupie, ale możesz mieć jeszcze jeden warunek, w którym chcesz wyświetlić inny element tylko wtedy, gdy wyświetlasz panel nauczyciela lub jeśli użytkownik ma domyślnie dostęp do tego innego panelu:
if displayTeacherPanel or user.canSeeSpecialPanel():
showSpecialPanel()
Spróbuj zapisać powyższy warunek bez użycia zmiennych do przechowywania i etykietowania logiki, a nie tylko kończysz z bardzo niechlujnym, trudnym do odczytania logicznym stwierdzeniem, ale też po prostu powtarzasz się. Chociaż istnieją uzasadnione wyjątki, pamiętaj: nie powtarzaj się (suche).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 06:24:12
" wszystkie "i" dowolne " są miłe dla wielu warunków tego samego typu. Ale zawsze oceniają wszystkie warunki. Jak pokazano w tym przykładzie:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 10:38:37
(lekko zmodyfikowałem identyfikatory, ponieważ nazwy o stałej szerokości nie są reprezentatywne dla prawdziwego kodu – przynajmniej nie prawdziwego kodu, który napotkam – i podważę czytelność przykładu.)
if (cond1 == "val1" and cond22 == "val2"
and cond333 == "val3" and cond4444 == "val4"):
do_something
To działa dobrze Dla "and "I" or " (ważne, aby były pierwsze na drugiej linii), ale znacznie mniej dla innych długich warunków. Na szczęście te pierwsze wydają się być bardziej powszechnym przypadkiem, podczas gdy te drugie są często łatwo przepisywane zmienną tymczasową. (Zazwyczaj nie jest to trudne, ale zachowanie zwarcia "i" / " lub " podczas przepisywania może być trudne lub znacznie mniej oczywiste/czytelne.)
Ponieważ znalazłem to pytanie z Twojego postu na blogu o C++, dodam, że mój styl C++ jest identyczny:
if (cond1 == "val1" and cond22 == "val2"
and cond333 == "val3" and cond4444 == "val4") {
do_something
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 08:33:47
Prosty i prosty, również przechodzi kontrole pep8:
if (
cond1 and
cond2
):
print("Hello World!")
W ostatnim czasie preferowałem funkcje all
i any
, Ponieważ rzadko mieszam i porównuję I or działa to dobrze, a dodatkową zaletą jest brak wcześnie zrozumienia generatorów:
if all([
cond1,
cond2,
]):
print("Hello World!")
Tylko pamiętaj, aby przejść w jednym iterable! Podanie N-argumentów nie jest poprawne.
Uwaga: any
jest jak wiele or
porównań, all
jest jak wiele and
porównania.
To ładnie łączy się z generatorami, na przykład:
# 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!")
Więcej na: generator pojęć
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:25
Co jeśli wstawimy tylko dodatkową pustą linię między stanem a ciałem, a resztę zrobimy w kanoniczny sposób?
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
P. S. Zawsze używam tabulatorów, nie spacji; nie mogę dostroić...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 02:45:40
To co zwykle robię to:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'
):
do_something
W ten sposób klamra zamykająca i dwukropek wizualnie oznaczają koniec naszego stanu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-01 17:53:44
Wszyscy respondenci, którzy również dostarczają wielu warunków dla twierdzenia if, są tak samo brzydcy jak przedstawiony problem. Nie rozwiązuje się tego problemu, robiąc to samo..
Nawet odpowiedź PEP 0008 jest odpychająca.
Tutaj jest o wiele bardziej czytelne podejście
condition = random.randint(0, 100) # to demonstrate
anti_conditions = [42, 67, 12]
if condition not in anti_conditions:
pass
Chcesz, żebym zjadł moje słowa? Przekonaj mnie, że potrzebujesz multi-conditionals, a dosłownie wydrukuję to i zjem dla Twojej rozrywki.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-17 06:16:15
Myślę, że rozwiązanie @zkanda byłoby dobre z drobnym zwrotem akcji. Jeśli masz swoje warunki i wartości na swoich własnych listach, możesz użyć zrozumienia listy do porównania, co uczyniłoby rzeczy nieco bardziej ogólne dla dodawania par warunek / wartość.
conditions = [1, 2, 3, 4]
values = [1, 2, 3, 4]
if all([c==v for c, v in zip(conditions, values)]):
# do something
Gdybym chciał zakodować taką wypowiedź, napisałbym ją tak dla czytelności:
if (condition1==value1) and (condition2==value2) and \
(condition3==value3) and (condition4==value4):
I po prostu rzucić inne rozwiązanie tam z iand
operator :
proceed = True
for c, v in zip(conditions, values):
proceed &= c==v
if proceed:
# do something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 13:13:07
Tylko kilka innych przypadkowych pomysłów dla kompletności. Jeśli pracują dla Ciebie, używaj ich. W przeciwnym razie lepiej będzie spróbować czegoś innego.
Można to również zrobić za pomocą słownika:>>> x = {'cond1' : 'val1', 'cond2' : 'val2'}
>>> y = {'cond1' : 'val1', 'cond2' : 'val2'}
>>> x == y
True
Ta opcja jest bardziej skomplikowana, ale może okazać się przydatna:
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!"
Nie wiem, czy to ci pasuje, ale to inna opcja do rozważenia. Jest jeszcze jeden sposób:
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'
Dwa ostatnie nie testowałem, ale koncepcje powinny wystarczyć, aby idę, jeśli tego chcesz.
(i tak na marginesie, jeśli to tylko jednorazowa rzecz, prawdopodobnie lepiej będzie użyć metody, którą przedstawiłeś na początku. Jeśli robisz porównanie w wielu miejscach, metody te mogą poprawić czytelność na tyle, aby nie czuć się tak źle z powodu faktu, że są one trochę chwiejne.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 17:26:00
Ciężko mi znaleźć przyzwoity sposób, aby to zrobić, więc wpadłem na pomysł (nie Srebrna kula, ponieważ to głównie kwestia gustu).
if bool(condition1 and
condition2 and
...
conditionN):
foo()
bar()
Znajduję kilka zalet w tym rozwiązaniu w porównaniu do innych, które widziałem, a mianowicie, otrzymujesz dokładnie dodatkowe 4 przestrzenie wcięć (bool), pozwalając wszystkim warunkom wyrównać się pionowo, a ciało instrukcji if może być wcięte w jasny (Owalny) sposób. Pozwala to również zachować korzyści płynące z oceny zwarciowej funkcji logicznej operatorów, ale oczywiście dodaje narzut wywołania funkcji, która w zasadzie nic nie robi. Można argumentować (prawomocnie), że każda funkcja zwracająca swój argument może być użyta tutaj zamiast bool, ale jak powiedziałem, to tylko pomysł i ostatecznie to kwestia gustu.
Dość zabawne, kiedy to pisałem i myślałem o "problemie", wpadłem na jeszcze jeden pomysł, który usuwa narzut wywołania funkcji. Dlaczego nie wskazać, że mamy zamiar wejść w kompleks warunek przy użyciu dodatkowych par nawiasów? Powiedzmy, 2 więcej, aby dać ładne 2 wcięcie przestrzeni pod-warunków w stosunku do ciała instrukcji if. Przykład:
if (((foo and
bar and
frob and
ninja_bear))):
do_stuff()
Podoba mi się to, ponieważ kiedy na to patrzysz, natychmiast dzwoni ci do głowy dzwonek z napisem"Hej, dzieje się tu coś skomplikowanego!". Tak, Wiem, że nawiasy nie pomagają w czytelności, ale te warunki powinny pojawiać się wystarczająco rzadko, a kiedy się pojawią, będziesz musiał przestać i przeczytaj je ostrożnie i tak (ponieważ są złożone ).
W każdym razie, jeszcze dwie propozycje, których tu nie widziałem. Mam nadzieję, że to komuś pomoże:)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-03 19:19:18
Można podzielić na dwie linie
total = cond1 == 'val' and cond2 == 'val2' and cond3 == 'val3' and cond4 == val4
if total:
do_something()
Lub nawet dodać jeden warunek na raz. W ten sposób, przynajmniej oddziela bałagan od if
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 19:30:45
Wiem, że ten wątek jest stary, ale mam trochę kodu Pythona 2.7 i PyCharm (4.5) wciąż narzeka na ten przypadek:
if foo is not None:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
# some comment about do_something
do_something
Nawet z ostrzeżeniem PEP8 "wizualnie wcięta linia z tym samym wcięciem co następna linia logiczna", rzeczywisty kod jest całkowicie w porządku? To nie jest "nadmierne wcięcia?"
...czasami chciałbym, żeby Python ugryzł kulę i po prostu odszedł z kręconymi aparatami. Ciekawe ile błędów zostało przypadkowo wprowadzonych przez lata z powodu przypadkowego błędne wcięcie...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 17:12:15
Spakuj swoje warunki do listy, a następnie zrób smth. like:
if False not in Conditions:
do_something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-09 09:23:43
Stwierdzam, że kiedy mam długie warunki, często mam krótki kod. W takim razie po prostu podwoję ciałko, czyli:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-22 08:31:27
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
Lub jeśli jest to jaśniejsze:
if cond1 == 'val1'\
and cond2 == 'val2'\
and cond3 == 'val3'\
and cond4 == 'val4':
do_something
Nie ma powodu, dla którego wcięcie powinno być wielokrotnością 4 w tym przypadku, np. patrz "wyrównane z otwierającym ogranicznikiem":
Http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=Indentation#Indentation
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-13 11:13:19
Oto inne podejście:
cond_list = ['cond1 == "val1"','cond2=="val2"','cond3=="val3"','cond4=="val4"']
if all([eval(i) for i in cond_list]):
do something
To również ułatwia dodanie kolejnego warunku bez zmiany instrukcji if, po prostu dodając kolejny warunek do listy:
cond_list.append('cond5=="val5"')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-16 22:08:03
Zwykle używam:
if ((cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4')):
do_something()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-05 00:12:32
Jeśli nasz warunek if & an else musi wykonać wiele instrukcji wewnątrz niego, to możemy napisać jak poniżej. Każdy, gdy mamy przykład if else z jednym stwierdzeniem w środku .
Thanks it work for me.
#!/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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-06 12:27:55
Wybaczcie mój noobness, ale zdarza się, że nie jestem tak obeznany z # Python jak ktokolwiek z was tutaj, ale zdarza się, że znalazłem coś podobnego podczas skryptowania własnych obiektów w modelowaniu 3D BIM, więc dostosuję mój algorytm do tego Pythona.
Problem, który znajduję tutaj, jest dwustronny:
-
/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center /
- utrzymanie kodu będzie kosztować, jeśli te wartości zostaną zmienione (większość prawdopodobne), lub jeśli trzeba dodać nowe warunki (złamany schemat)
Zrobić aby ominąć wszystkie te problemy, Twój skrypt musi iść tak
param_Val01 = Value 01 #give a meaningful name for param_Val(i) preferable an integer
param_Val02 = Value 02
param_Val03 = Value 03
param_Val04 = Value 04 # and ... etc
conditions = 0 # this is a value placeholder
########
Add script that if true will make:
conditions = conditions + param_Val01 #value of placeholder is updated
########
### repeat as needed
if conditions = param_Val01 + param_Val02 + param_Val03 + param_Val04:
do something
Zalety tej metody:
Skrypt jest czytelny.
Skrypt może być łatwy w utrzymaniu.
- conditions jest operacją porównawczą 1 do sumy wartości, która reprezentuje pożądane warunki.
- nie ma potrzeby stosowania warunków wielopoziomowych
Mam nadzieję, że pomoże wam wszystkim
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-25 17:28:13