Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?
PHP中文网
PHP中文网 2017-04-18 10:28:27
0
4
678

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

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

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

相关代码

  • 能否一眼辨别出, 什么时候, 什么条件下 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中文网

认证0级讲师

membalas semua(4)
巴扎黑

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.

伊谢尔伦

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;-)

刘奇

Tiada kekaburan, cuma anda tidak biasa.

PHPzhong

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!