cari

Rumah  >  Soal Jawab  >  teks badan

Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?

看到用了 for-else/while-else的代码, 往往不能马上搞懂 else 处代码的意思

因为, 脑袋不能马上反应, else 到底表示了什么样的语义( 还需要转几个弯 )

(但是 try - except -else 没有带来语义上的歧义)

相关代码

for i in range(5):
...     print(i)
... else:
...     print('Iterated over everything :)')


for i in range(5):
...     if i == 2:
...         break
...     print(i)
... else:
...     print('Iterated over everything :)')


for i in []:
...     print(i)
... else:
...     print('Still iterated over everything (i.e. nothing)')



> i = 0
>>> while i <= 5:
...     i += 1
...     print i
... else:
...     print 'Yep'



for x in data:
    if meets_condition(x):
        break
else:
    # raise error or do additional processing 
PHP中文网PHP中文网2785 hari yang lalu710

membalas semua(4)saya akan balas

  • 巴扎黑

    巴扎黑2017-04-18 10:30:27

    Subjek percaya bahawa dapat difahami bahawa semantiknya tidak jelas. Lagipun, lain dalam bahasa lain hanya berlaku jika, apatah lagi yang lain di sini tidak sesuai dengan semantik semula jadi.

    Dalam semantik semula jadi, else bermaksud "lain", tetapi untuk sementara, cuba taip lain, adalah tidak munasabah untuk menggunakan "kecuali untuk keadaan yang dipertimbangkan oleh atur cara di atas" untuk menerangkan klausa ini. Saya rasa lebih tepat untuk memahaminya sebagai "keadaan selepas blok utama berakhir secara normal" - apa yang dipanggil blok utama ialah badan gelung atau klausa cuba dilampirkan kepada yang lain yang dipanggil normal bermakna aliran kawalan tidak diganggu dengan cara khas (pengecualian atau gelung) putus).

    Mungkin lebih jelas untuk memahaminya dengan cara ini.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:30:27

    Saya suka contoh ini:

    n = 17
    for d in range(2,n):
        if n % d == 0:
            print(n, '是合数')
            break
    else:
        print(n, '是素数')

    Jika tidak ada yang lain, kita harus menambah pembolehubah bool dan if/else selepas gelung for. Ia lebih mudah untuk digunakan untuk/lainnya. Anda akan terbiasa dengannya secara beransur-ansur;-)

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:30:27

    Tiada kekaburan, cuma anda tidak biasa.

    balas
    0
  • PHPz

    PHPz2017-04-18 10:30:27

    Fluent Python的作者认为是会增加的,他这样说到:Saya fikir lain adalah pilihan yang sangat buruk untuk kata kunci dalam semua kes kecuali jika. Ia membayangkan alternatif yang mengecualikan, seperti "Jalankan gelung ini, sebaliknya lakukan itu", tetapi semantik untuk lain dalam gelung adalah sebaliknya: "Jalankan gelung ini, kemudian lakukan itu". Ini mencadangkan sebagai kata kunci yang lebih baik — yang juga masuk akal dalam konteks percubaan: "Cuba ini, kemudian lakukan itu." Walau bagaimanapun, menambah kata kunci baharu merupakan perubahan yang ketara pada bahasa dan Guido mengelakkannya seperti wabak.

    balas
    0
  • Batalbalas