不要随便迷信大佬
共 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书上就这么写的,不推荐这么用,别人会觉得你缺乏独立思考能力,具体问题应该放在具体的场景中去分析讨论,而不是一言以蔽之。
我说的可能也是错的。