我在 Python 2 中有一個代碼,我想將其轉(zhuǎn)換為 Python 3,但是代碼的行為必須與 Python 2 解釋器上的行為完全相同。特別是除法必須像在 Python 2 解釋器上一樣。我嘗試了futurize第 1 階段和第 2 階段,但除法只保留/在代碼上,這會在執(zhí)行時產(chǎn)生錯誤,因為返回的數(shù)字是類型float而不是類型int(這是在 Python 2 解釋器上執(zhí)行的代碼的默認(rèn)行為)。編輯: 3 // 2 = 1.0這是float在 Python 3 中。有沒有辦法返回int?
2 回答

一只萌萌小番薯
TA貢獻1795條經(jīng)驗 獲得超7個贊
Futurize/Modernize/2to3 不能靜態(tài)分析哪些除法是整數(shù)除法。
您將需要在轉(zhuǎn)換后的代碼中手動執(zhí)行除法運算,并找出哪些應(yīng)該//
用于整數(shù)除法,哪些應(yīng)該/
用于實數(shù)除法。
自然地,您的代碼庫的測試用例應(yīng)該在這里找到任何回歸。;)

眼眸繁星
TA貢獻1873條經(jīng)驗 獲得超9個贊
整數(shù)除法運算符//在 python 3 中。
>>> 3 / 2
1.5
>>> 3 // 2
1
編輯:我所知道的從兩個版本的 python 中獲得兼容行為的唯一方法是未來化 python 2/操作,并轉(zhuǎn)換任何期望在 python 2 程序中進行整數(shù)除法的實例,而不是使用//適用于兩個 python 2 中的整數(shù)除法的實例和 3。
添加回答
舉報
0/150
提交
取消