標籤:

如何寫python2和3兼容代碼?

請大家指點


Python工程師應該儘早習慣寫Python 2/3兼容的代碼。我有幾點建議吧:

1. 在還不熟悉Python 3時,個人或者小型的項目可以直接使用six這個包,它裡面彙集了很多兼容代碼,另外一些知名的開源項目(如Django、Flask、Celery(拆到獨立項目了)等)自己就會包含項目所需要的兼容代碼,其實兼容或者Python 3有而Python 2沒有的就那麼多,寫過一段時間就都了解了,各大項目都有兼容的實踐可供借鑒。我也推薦在每個項目中寫一個這樣的six.py或者five.py的文件存放這些兼容代碼。另外如果項目眾切都是你主力開發,那麼可以把它拆出來複用。

2. 寫代碼的時候有意識的給後人種樹,比如我現在寫Python的時候不用xrange(其實和用range的效果在場景場景小差別微乎其微,知道特性要用對場景,不需要一概而論)、不用生成器的next方法、print直接當函數寫、不用那些在Python3被移除的模塊或者函數(比如md5,直接用hashlib替代,不用raw_input而是用input,使用functools.reduce而不是直接用內置的reduce等等)。另外模塊import的時候要注意Python 3一些模塊命名空間被改變的問題等等,等某一天真的要遷移的時候,無論你還在不在這裡了,都會感謝你今天所做的這些鋪墊。

3. 2to3這個工具我用得少,通常是項目想遷移到3的初始化時,一方面它支持轉換有限,而且無論怎麼樣生產環境的代碼還是需要人工驗證的。另外一點是這種自動完成的我學不到東西。

其實寫兼容代碼純是個經驗活兒,我當初攢經驗的方法是去Github上找個大點的有名點的項目給它寫兼容代碼(雖然最後不會提交正式的PR),過這麼1-2個項目就能得心應手了。

寫兼容代碼並不是洪水猛獸。


https://pypi.python.org/pypi/six


推薦使用pycharm,簡單設置後可以在項目出現非兼容性代碼時給出提示,寫一段時間後基本就可以自然的寫出2,3兼容的代碼了。

附上官方的說明

https://blog.jetbrains.com/pycharm/2016/03/pycharm-5-1-beta-is-available/

希望對你有幫助。


推薦閱讀:

如何爬取知乎的ajax內容?
使用 Python 寫一個搶課用的軟體,卡在了取課表這一步,怎麼辦?
Python3.4 用 pip 安裝lxml時出現 「Unable to find vcvarsall.bat 」?
基於python的scrapy爬蟲,關於增量爬取是怎麼處理的?
GitHub 上有什麼值得學習,簡單的,易讀的 Python 項目?

TAG:Python | Python3x |