سؤال

تكرار ممكن:
Python Ternary Operator

أنا فقط دخلت في بيثون وأحب حقًا بناء الجملة. ومع ذلك ، هل هناك طريقة أسهل لكتابة if-then-else بيان حتى يناسب سطر واحد؟

علي سبيل المثال:

if count == N:
    count = 0
else:
    count = N + 1

هل هناك طريقة أبسط لكتابة هذا؟ أعني ، في الهدف-C سأكتب هذا على أنه:

count = count == N ? 0 : count + 1;

هل هناك شيء مشابه للبيثون؟

تحديث

أعلم أنه في هذه الحالة يمكنني استخدامه count == (count + 1) % N.

أنا أسأل عن بناء الجملة العام.

هل كانت مفيدة؟

المحلول

هذا بشكل أكثر تحديدا عامل ثلاثي تعبير من If-then ، إليك بناء جملة Python

value_when_true if condition else value_when_false

مثال أفضل: (شكرًا السيد بيرنز)

'Yes' if fruit == 'Apple' else 'No'

الآن مع المهمة والتناقض مع بناء الجملة

fruit = 'Apple'
isApple = True if fruit == 'Apple' else False

ضد

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True

نصائح أخرى

علاوة على ذلك ، لا يزال بإمكانك استخدام "العادي" if بناء الجملة وخلطه في سطر واحد مع القولون.

if i > 3: print("We are done.")

أو

field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural)) 
count = 0 if count == N else N+1

- المشغل الثلاثية. على الرغم من أنني أقول أن الحل الخاص بك أكثر قابلية للقراءة من هذا.

بناء الجملة الثلاثية:

value_true if <test> else value_false

يمكن أن تكون هناك طريقة أخرى:

[value_false, value_true][<test>]

على سبيل المثال:

count = [0,N+1][count==N]

هذا يقيم كلا الفرعين قبل اختيار واحد. لتقييم الفرع المختار فقط:

[lambda: value_false, lambda: value_true][<test>]()

على سبيل المثال:

count = [lambda:0, lambda:N+1][count==N]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

مع الكود الخاص بك ، سيصبح ،

count = 0 if count == N else N + 1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top