不要随便迷信大佬

python之禅

共 1702字,需浏览 4分钟

 ·

2021-04-23 13:35

前段时间在看一本书,看过的应该知道是哪本



是的,就是那本《effective python》第二版,作者是谷歌的一位工程师,用Python很多年了。


第9条我做了个标记。


python中,在for、while循环以及 try except中可以接else,这种语法是python中特有的,但这里作者并不建议大家去这么用。


为什么不要用,作者的意思就是不好理解,我们先来看一段代码示例吧:


for item in container:
    if find_something(item):
        # Found it!
        process(item)
        break
else:
    # Didn't find anything..
    not_found()


这是一段从某个容器中迭代查找每一项是否含有东西,如果有就对其进行处理,并提前结束该程序。如果迭代到最后一个元素都没找到,就提示 not_found()


那么问题来了,else 代码块到底是什么时候执行?


新手以为进入了for循环,就不执行 else,其实,不是这样的。


else 语句块会在for语句块正常结束后,接着执行else语句,什么意思呢?


就是在for代码块中只要没遇到 break 或者 return 关键字,所有元素迭代完之后接着执行else语句块, else与break是才是真正的“是否”对应关系。


对熟悉python的人来,觉得这种写法很简洁,很pythonic,但是如果我不用 for else 语法的话,我就得这么写


found = False
for item in container:
    found = find_something(item)
    if found:
        # Found it!
        process(item)
        break

if not found:
    # Didn't find anything..
    not_found()

我不得不定义一个临时变量来存储每次的执行结果。


语法繁琐!


所以,你问我选哪种写法,我当然是推荐前者,不然这段代码就不是pythonic代码了。


当然,我不是说这本书写的不好,反而里面很多建议非常具有参考价值


我写这篇文章的目的,只是告诉大家,即便是大佬说的也不一定是对的,更不要把大佬的话当作权威。如果哪天你和别人讨论说,xxx书上就这么写的,不推荐这么用,别人会觉得你缺乏独立思考能力,具体问题应该放在具体的场景中去分析讨论,而不是一言以蔽之。


我说的可能是错的。

浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报