Python|為什么列表推導(dǎo)式會(huì)更快
1、列表推導(dǎo)式
你一定聽過這樣一個(gè)說法视译,盡量使用列表推導(dǎo)式嬉荆,而不是用list.append方法來初始化一個(gè)列表,那么究竟為何列表推導(dǎo)式會(huì)更快呢酷含?
這是因?yàn)樵笨埽斜硗茖?dǎo)式被編譯后的字節(jié)碼執(zhí)行速度更快。python當(dāng)然不是一門編譯型語言第美,但是它還是要被解析成二進(jìn)制的字節(jié)碼才能被執(zhí)行蝶锋,執(zhí)行它的正是python解釋器。
2什往、dis
這個(gè)模塊原生的代碼分析模塊扳缕,通過它,我們可以查看python代碼被編譯后的字節(jié)碼
3别威、示例
Python|為什么列表推導(dǎo)式會(huì)更快
執(zhí)行上面這段代碼躯舔,輸出內(nèi)容為
Python|為什么列表推導(dǎo)式會(huì)更快
對比一下,不難發(fā)現(xiàn)省古,兩個(gè)段字節(jié)碼最大的區(qū)別在于添加元素的部分
func1 中粥庄,先要LOAD_ATTR,將append方法加載進(jìn)來豺妓,然后CALL_FUNCTION惜互,也就是執(zhí)行
而在func2中布讹,則直接調(diào)用了LIST_APPEND命令來添加元素,就是這一個(gè)小小的區(qū)別训堆,使得列表推導(dǎo)式的速度會(huì)更快描验,因?yàn)閒unc1相比于func2多了一個(gè)LOAD_ATTR的過程,要明白坑鱼,這條命令在每次循環(huán)中都會(huì)被執(zhí)行膘流,一旦循環(huán)的次數(shù)多起來,就必然拖慢速度