如何寫(xiě)出更穩(wěn)定的Python 代碼?
Python 這門(mén)語(yǔ)言太簡(jiǎn)單了,簡(jiǎn)單到隨便一個(gè)人,學(xué)了半小時(shí)就能寫(xiě)出代碼,寫(xiě)了幾個(gè)月代碼就敢在簡(jiǎn)歷上寫(xiě)自己熟練掌握 Python?;蛘哂腥艘詾? Python 等于 pandas,Python 等于 AI。
目前市面上,講 Python 入門(mén)的課程很多、講基于 Python 實(shí)現(xiàn)的 AI、數(shù)據(jù)分析、后端的課程也很多。但講 Python 進(jìn)階的課程不多,講如何避免 Python 坑點(diǎn)的也不多。
但是,如果大家看一下很多人寫(xiě)的 Python 代碼,就會(huì)發(fā)現(xiàn),一是代碼丑。二是亂用各種特性和語(yǔ)法糖,不知道從哪里學(xué)來(lái)幾個(gè)高級(jí)用法,就到處亂用炫技
很多人寫(xiě)出的代碼,僅僅是一個(gè)能夠工作,“當(dāng)前”能產(chǎn)生正確結(jié)果的代碼。這個(gè)代碼毫無(wú)優(yōu)化可言,速度慢,不穩(wěn)定,不知道未來(lái)哪天突然就不能用了。
有很多人吐槽 Python 速度慢,有全局解釋器鎖限制了代碼的性能,或者 Python 是動(dòng)態(tài)語(yǔ)言,變量可以隨便賦值導(dǎo)致項(xiàng)目難以維護(hù)。。。
但實(shí)際上,我想說(shuō),寫(xiě)出能夠工作的 Python 代碼,這很容易,但是把 Python 用對(duì)又是另一回事。很多人把 Python 的特性當(dāng)做 Bug,把自己的無(wú)知當(dāng)做語(yǔ)言的缺陷。很多人濫用 Python 的特性,然后怪Python 本身太靈活難以維護(hù)。
常見(jiàn)的問(wèn)題
我們來(lái)看幾個(gè)例子。我剛剛加入網(wǎng)易的時(shí)候,當(dāng)時(shí)有一個(gè)做數(shù)據(jù)倉(cāng)庫(kù)的高級(jí)工程師,給他帶的實(shí)習(xí)生說(shuō),Python 有全局解釋器鎖,所以它的多線(xiàn)程實(shí)際上是單線(xiàn)程,不需要考慮并發(fā)沖突。這種說(shuō)法是對(duì)全局解釋器鎖的一種徹底誤解,這樣說(shuō)的人,根本不知道全局解釋器鎖作用在哪里。
還有人代碼里面大量的 try … except,一層套一層。這樣一來(lái),它的代碼運(yùn)行以后絕對(duì)不會(huì)報(bào)錯(cuò)??雌饋?lái)非常穩(wěn)定。但是經(jīng)常運(yùn)行一段時(shí)間,輸出的結(jié)果就跟預(yù)期相差甚遠(yuǎn)。而且根本不知道哪里出了問(wèn)題。
有的同學(xué)電腦里面第一個(gè) Python 是使用 Anaconda 安裝的。后來(lái)因?yàn)槠渌蛞惭b另外的 Python 環(huán)境。導(dǎo)致原來(lái)的環(huán)境不能正常使用。打開(kāi) PyCharm 后,發(fā)現(xiàn)全是紅色波浪線(xiàn)。使用 pip 安裝一個(gè)第三方庫(kù),明明已經(jīng)安裝成功了,在命令行交互環(huán)境已經(jīng)可以正常導(dǎo)入了,但是在 PyCharm 里面一運(yùn)行就報(bào)錯(cuò),提示缺少這個(gè)第三方庫(kù)。
還有的同學(xué),不知道做了什么操作,導(dǎo)致 Python 自帶的模塊無(wú)法正常導(dǎo)入,或者導(dǎo)入以后,缺少了對(duì)應(yīng)的功能,一運(yùn)行就報(bào)錯(cuò)。