前言
最近 Python 之父 Guido van Rossum(龜爺)終于在 Python 官方郵件組落實了 Python 2.7 的終焉之日(EOL)。
說的是 Python 2.7 的 EOL 日期最終確定為 2020 年 1 月 1 日,之后不會有任何更新,包括源碼的安全補丁。
所以兼容Python3已經可以說非常必要了,但有些常用的庫還沒有升級到Python3,所以我們看下如何寫出兼容2和3的代碼。
Python 2 or 3 ?
Python 3 被欽定為 Python 的未來,于 2008 年末發布,是目前正在開發的版本。旨在解決和修正 Python 2 遺留的設計缺陷、清理代碼庫冗余、追求有且僅有一種最佳實踐方式來執行任務等問題。
起初,由于 Python 3 不能向后兼容的事實,導致了用戶采用緩慢,對初學者不友好等問題。但在 Python 社區的努力和決絕態度下,截至龜爺發出郵件之前,已經有了 21903 個 Packages 可以支持 Python 3.5,其中包括了絕大多數最受歡迎的封裝庫,與此同時也有越來越多的封裝庫(e.g. Django、Numpy)表示其新版本將不再支持 Python 2。
Python 2.7 于 3.0 之后的 2010 年 7 月 3 日發布,計劃作為 2.x 的最后一個版本。Python 2.7 的歷史任務在于通過提供 2 和 3 之間的兼容性措施,使 Python 2.x 的用戶更容易將代碼移植到 Python 3.x 上。那么如果你希望自己的代碼能夠兼容兩個不同的版本,首先你起碼要讓代碼能夠正常的運行在 Python 2.7 上。
注:下文使用 P2 表示 Python 2.7;使用 P3 表示 Python 3.x。
不同與兼容
__future__ 模塊是我們首先需要了解的,該模塊最主要的作用是支持在 P2 中導入那些在 P3 才生效的模塊和函數。是一個非常優秀的兼容性工具庫,在下文中給出的許多 兼容技巧 實例都依賴于它。
特性在此版本可選在此版本內置效果
電腦技術002pc網認為此文章對《python 字符串 r raw Python2 和 Python3 的區別及兼容技巧》說的很在理。
nested_scopes2.1.0b12.2PEP 227:靜態嵌套作用域
generators2.2.0a12.3PEP 255:簡單生成器
division2.2.0a23.0PEP 238:除法操作符改動
absolute_import2.5.0a13.0PEP 328:Imports 多行導入與絕對相對路徑
with_statement2.5.0a12.6PEP 343:with 語句
print_function2.6.0a23.0PEP 3105:print 語句升級為函數
unicode_literals2.6.0a23.0PEP 3112:Bytes 類型
(__future__ 功能列表)
統一不等于語法
P2 支持使用 <> 和 != 表示不等于。
P3 僅支持使用 != 表示不等于。
兼容技巧:
統一使用 != 語法
統一整數類型
P2 中整數類型可以細分為短整型 int 和長整型 long。
P3 廢除了短整型,并統一使用 int 表示長整型(不再有 L 跟在 repr 后面)。
兼容技巧:#?Python?2?only
k?=?9223372036854775808L
#?Python?2?and?3:
k?=?9223372036854775808#?Python?2?only
bigint?=?1L
#?Python?2?and?3
from?future.builtins?import?int
bigint?=?int(1)
統一整數除法
P2 的除法 / 符號實際上具有兩個功能:
當兩個操作數均為整型對象時,進行的是地板除(截除小數部分),返回整型對象;
當兩個操作數存在至少一個浮點型對象時,進行的是真除(保留小數部分),返回浮點型對象。
P3 的除法 / 符號僅僅具有真除的功能,而地板除的功能則交由 // 來完成。
兼容技巧:#?Python?2?only:
assert?2?/?3?==?0
#?Python?2?and?3:
assert?2?//?3?==?0
“True?division”?(float?division):#?Python?3?only:
assert?3?/?2?==?1.5
#?Python?2?and?3:
from?__future__?import?division????#?(at?top?of?module)
更多:python 字符串 r raw Python2 和 Python3 的區別及兼容技巧
https://www.002pc.comhttps://www.002pc.com/python/1254.html
你可能感興趣的Python3,Python2,兼容,技巧,區別
No alive nodes found in your cluster
0踩
賞
0 贊