Umieszczenie prostej instrukcji if-then-else w jednej linii [duplikat]

to pytanie ma już odpowiedzi tutaj : czy Python ma trójdzielny operator warunkowy? (28 odpowiedzi) Zamknięte w zeszłym roku.

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ę.

Author: ivanleoncz, 2010-05-10

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
 1873
Author: cmsjr,
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)) 
 213
Author: Johannes Braunias,
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.

 145
Author: Tim Pietzcker,
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]()
 120
Author: mshsayem,
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
 26
Author: phoenix24,
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