![每个人的Python:数学、算法和游戏编程训练营](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/44510137/b_44510137.jpg)
上QQ阅读APP看书,第一时间看更新
3.2.2 使用高级循环方法对代码进行优化
我们知道Python中的for-in循环可以快速地构建列表,这种语法在日常开发中的一个常用的场景便是将字符串中的每个字符单独拆到列表中,示例代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T57_29639.jpg?sign=1739039975-Bl3zHqI04gtLSTeNDKWVAKXkucZNE24l-0-70982b12c294e13740f3d546aa32901a)
其实在使用这种循环的方式构建列表时,我们也可以提供一定的筛选条件,例如:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T57_29638.jpg?sign=1739039975-3ndGzSd28UjPGQBowb97jGQmPw5fC2od-0-5eab62c9c1bc56e9472d32771b68b9b2)
有了[for-in-if]这种结构,使用循环构建列表变得非常灵活,尤其是对需要筛选元素的场景非常适合。
再来回顾一下上一小节的程序,其实核心的逻辑也是使用条件对列表进行筛选。修改上一小节的代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T57_29637.jpg?sign=1739039975-colbxs9A7gueEDjuqlKlzYgBfubZnbxW-0-5527ad8f42847f0ef02808d7b1515e20)
修改后的代码将核心的逻辑使用了[for-in-if]结构进行改写,大大地缩短了程序代码的行数,缩短代码行数的代价是程序的可读性变得差了一些。原则上,任何需要使用循环进行筛选的逻辑都可以使用[for-in-if]结构代替,并且这种结构也支持嵌套使用,如果要对上面的代码再进行一次简化,可以修改如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T58_29633.jpg?sign=1739039975-7JRiPGQrXoBjlH7uoFkHf1S361qrpnLB-0-cfbab560563d8afd06dcad1c0edc448b)
最终,一行代码即可解决自除数的问题,但是这行程序的可读性基本差到了极致,阅读这段代码的人要看懂逻辑会多花费很多时间。因此,在实际的开发中,要根据场景选择适合的编码风格,牺牲可读性可能会极致地减短代码行数,而这种极致的优化更多时候可能会得不偿失。