久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

Python, for-else, while-else是否造成了語義歧義 ( 增加心智負(fù)擔(dān) )?

瀏覽:144日期:2022-08-20 08:03:48

問題描述

看到用了 for-else/while-else的代碼, 往往不能馬上搞懂 else 處代碼的意思

因?yàn)? 腦袋不能馬上反應(yīng), else 到底表示了什么樣的語義( 還需要轉(zhuǎn)幾個彎 )

(但是 try - except -else 沒有帶來語義上的歧義)

相關(guān)代碼

能否一眼辨別出, 什么時候, 什么條件下 else處代碼會執(zhí)行?

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):breakelse: # raise error or do additional processing

問題解答

回答1:

題主認(rèn)為語義不明是可以理解的。畢竟其他語言中的 else 只跟 if 搭配,更何況這里的 else 并不符合自然語義。

在自然語義下,else 有 '其它的' 的意思,但對 for, while, try 型 else,用 '除了以上程序考慮到的情況' 來解釋此子句并不合理。私以為理解成 '主塊正常結(jié)束后的情況' 更為正確——所謂主塊,即 else 附屬的 循環(huán)體 或 try 子句; 所謂正常,即不通過特殊手段中止控制流(異常 或 循環(huán)中的 break)。

這么理解可能更清晰些。

回答2:

我喜歡這個例子:

n = 17for d in range(2,n): if n % d == 0:print(n, ’是合數(shù)’)breakelse: print(n, ’是素數(shù)’)

沒有else的話我們應(yīng)該加個bool變量,for循環(huán)后還加個if/else。用for/else的話簡單多了。你慢慢會熟悉;-)

回答3:

沒有歧義,你不習(xí)慣而已。

回答4:

Fluent Python的作者認(rèn)為是會增加的,他這樣說到:I think else is a very poor choice for the keyword in all cases except if. It implies an excluding alternative, like “Run this loop, other‐ wise do that”, but the semantics for else in loops is the opposite: “Run this loop, then do that”. This suggests then as a better keyword — which would also make sense in the try context: “Try this, then do that.” However, adding a new keyword is a breaking change to the language, and Guido avoids it like the plague.

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 曲靖市| 德庆县| 屯门区| 天祝| 东平县| 江油市| 星子县| 肥东县| 太康县| 九台市| 阿克| 江油市| 手机| 扎囊县| 辽源市| 思南县| 武清区| 安多县| 五台县| 天气| 灵山县| 台江县| 商洛市| 枣强县| 葵青区| 方城县| 蛟河市| 龙泉市| 汨罗市| 汝城县| 西昌市| 田东县| 色达县| 璧山县| 江达县| 金溪县| 宜春市| 四平市| 都江堰市| 宁津县| 肥西县|