標籤:檔案的 獲得 括弧 修改 程式 function 應用 ports form
2to3 - 自動Python 2到3代碼轉換
2to3是一個Python程式,它讀取Python 2.x原始碼並應用一系列修複程式將其轉換為有效Python 3.x代碼。標準庫包含一組豐富的修複程式,可以處理幾乎所有代碼。但是,2to3支援庫lib2to3是一個靈活的通用庫,因此可以為2to3編寫自己的修複程式。 lib2to3也可以適用於需要自動編輯Python代碼的自訂應用程式。
使用2to3的
2to3通常與Python解譯器一起安裝為指令碼。它也位於Python根目錄的Tools / scripts目錄中。
2to3的基本參數是要轉換的檔案或目錄的列表。這些目錄將以遞迴方式遍曆Python原始碼。
以下是Python 2.x源檔案樣本example.py:
def greet (name ): 列印 “你好,{0}!” 。格式(名稱)列印 “你叫什麼名字?” name = raw_input ()greet (name )
它可以通過命令列上的2to3轉換為Python 3.x代碼:
$ 2to3 example.py
列印對原始源檔案的差異。2to3還可以將所需的修改寫回源檔案。(當然,除非也給出了-n,否則也會對原始文??件進行備份。)使用-w標誌啟用後面的更改:
$ 2to3 -w example.py
轉換後,example.py看起來像這樣:
def greet (name ): print (“Hello,{0}!” 。format (name ))print (“你叫什麼名字?” )name = input ()greet (name )
在整個翻譯過程中保留評論和精確縮排。
預設情況下,2to3運行一組預定義的修複程式。該-l標誌列出所有可用的固定器。可以使用-f給出一組明確的運行 修複程式。同樣,-x顯式禁用修複程式。以下樣本僅運行imports和has_key修複程式:
$ 2to3 -f進口-f has_key example.py
此命令運行除應用修複程式之外的每個修複程式:
$ 2to3 -x應用example.py
某些修複程式是顯式的,這意味著它們不是預設啟動並執行,必須在命令列中列出才能運行。在這裡,除了預設修複程式之外,還運行了成語修複程式:
$ 2to3 -f all -f idioms example.py
請注意如何通過all來啟用所有預設修複程式。
有時2to3會在原始碼中找到需要更改的位置,但2to3無法自動修複。在這種情況下,2to3將在檔案的差異下列印警告。您應該解決警告以獲得相容的3.x代碼。
2to3也可以重構doctests。要啟用此模式,請使用-d 標誌。請注意,只有 doctests才會被重構。這也不要求模組是有效Python。例如,rest文檔中的doctest樣本也可以使用此選項進行重構。
該-v選項可以對翻譯過程的詳細資料輸出。
當-p通過時,2to3將print視為函數而不是語句。從 __future__ import print_function使用時,這很有用。如果未給出此選項,則列印修複程式將在一組額外的括弧中包圍列印調用,因為它無法區分帶括弧的print語句(例如print (“a” + “b” + “c”))和a真正的函數調用。
lib2to3 - 2to3的庫
警告
該lib2to3 API應被視為不穩定,可能會在未來發生急劇變化。
python2x如何遷移代碼到python3中