Umieszczenie prostej instrukcji if-then-else w jednej linii [duplikat]
Dopiero zaczynam poznawać Pythona i bardzo podoba mi się zwięzłość składni. Czy jednak istnieje łatwiejszy sposób pisania if
-then
-else
oświadczenie więc pasuje do jednej linii?
Na przykład:
if count == N:
count = 0
else:
count = N + 1
Czy Jest jakiś prostszy sposób na napisanie tego? Chodzi mi o to, że w Objective-C napisałbym to jako:
count = count == N ? 0 : count + 1;
Czy jest coś podobnego do Pythona?
Update
Wiem, że w tym instancja, której mogę użyć count == (count + 1) % N
.
Pytam o ogólną składnię.
5 answers
To dokładniej Operator trójkowy wyrażenie niż if-then, oto składnia Pythona
value_when_true if condition else value_when_false
Lepszy przykład: (thanks Mr. Burns )
'Yes' if fruit == 'Apple' else 'No'
Teraz z przypisaniem i kontrastem z składnią if
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
Vs
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
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 12:10:47
Ponadto możesz nadal używać składni "zwykłej" if
i połączyć ją w jedną linię z dwukropkiem.
if i > 3: print("We are done.")
Lub
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
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-01-10 22:25:30
count = 0 if count == N else N+1
- operator trójdzielny. Chociaż powiedziałbym, że Twoje rozwiązanie jest bardziej czytelne niż to.
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-05-10 20:38:33
Składnia ogólna ternary:
value_true if <test> else value_false
Innym sposobem może być:
[value_false, value_true][<test>]
Np:
count = [0,N+1][count==N]
To ocenia obie gałęzie przed wyborem jednej. Aby ocenić tylko wybraną gałąź:
[lambda: value_false, lambda: value_true][<test>]()
Np.:
count = [lambda:0, lambda:N+1][count==N]()
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-24 11:16:58
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
Z Twoim urywkiem kodu stanie się,
count = 0 if count == N else N + 1
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-05-10 15:23:46