1. 程式人生 > >Python3程式碼相容Python2(兩者的一些區別)

Python3程式碼相容Python2(兩者的一些區別)

模組名處理

Python3中將一些Python2的模組名稱做了修改,需要我們做一些處理來保證程式碼在不同Python版本中能夠正常執行。本文主要記錄自己遇得到的一些不同。
我現在是通過異常處理的方式解決模組名稱的問題。

try:  #python3
    from unittest.mock import MagicMock
except ImportError:  #python3
    from mock import MagicMock
Python3 Python2
input() raw.input(),sys.readline()
整除// /

內建函式

Python3 Python2
unittest.mock.MagicMock mock.MagicMock
urllib.request.urlretrieve urllib.urlretrieve
queue Queue
functools.reduce reduce

使用future特性

一般在Python3程式碼引入模組程式碼的首行新增以下程式碼:

from __future__ import print_function
from __future__ import division

列表推導式的變數作用域

在Python2中,列表推導式中的索引變數的是可以洩露到其封閉作用域中的。而Python3中則不可以。
下面舉一個簡單的例子說明這個問題,如我們在一個for迴圈內部使用列表推導式

for i in range(2):
    a = [i for i in range(5)]
    print(i)

在Python3中,上面的程式碼輸出為

>>0
>>1

而在Python2中,上面的程式碼輸出為

>>4
>>4

這是由於Python2中的列表推導式中的索引變數i的作用域洩露到了for迴圈中。
一種較好的解決方式是在列表推導式中使用與外層迴圈變數不同的索引變數名。

使用指令碼將py2程式碼轉為py3

Python安裝目錄下的Scripts/2to3.exe可以將Pyhon2程式碼轉換為Python3。
使用命令2to3 -w file.py可以直接在原地修改檔案。其他命令可以使用2to3 --help檢視。

參考資料

相關推薦

Python3程式碼相容Python2兩者一些區別

模組名處理 Python3中將一些Python2的模組名稱做了修改,需要我們做一些處理來保證程式碼在不同Python版本中能夠正常執行。本文主要記錄自己遇得到的一些不同。 我現在是通過異常處理的方式解決模組名稱的問題。 try: #python3

python3.x與python2.x的一些區別

今日在學習python過程中,學的是python2.x,本機環境裝的是python3.x,所以總是有一些出錯,特來總結一下: python2.x: #---1、輸出語句--- print ‘hello world’    #直接輸出 #---2、ra

SparkStreaming部分:OutPutOperator類,SaveAsHadoopFile運算元實際上底層呼叫textFileStream讀取的,跟前兩種有一些區別【Java版純程式碼

package streamingOperate.output; import java.util.Arrays; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; imp

python3無法相容python2咋辦?2to3.py的介紹

老師給了一個畢業學長的大專案,竟然是python2寫的,又不想一個個改錯誤又不想下python2環境包去下3已經有的包。 還好3早就自帶的2轉3的指令碼2to3.py 這個指令碼在python環境下tools/scripts裡面 cd 到.\Tools\scripts cmd執行python 2to3.

嚐鮮centos7_1804和6版本的命令有一些區別

問題太多了,,, https://blog.csdn.net/anbulang/article/details/8057536 https://blog.csdn.net/vevenlcf/article/details/78297008  在虛擬機器中以最小化方式安裝centos7,後無

ClassLoader的工作原理Java中和Andriod中的一些區別

早期使用過 Eclipse 等 Java 編寫的軟體的同學可能比較熟悉,Eclipse 可以載入許多第三方的外掛(或者叫擴充套件),這就是動態載入。這些外掛大多是一些 Jar 包,而使用外掛其實就是動態載入 Jar 包裡的 Class 進行工作。這其實非常好理解,Ja

C#二維陣列的定義,初始化重在理解兩者區別

在學習C++基礎知識之後 , 現在學習C#其實簡單很多,但是還是有些不同的,就比如C#中二維陣列的定義、宣告 都 是有所不同的。 下面看看有什麼不同: using System; using System.Collections.Generic; using System

python3如何相容python2

Python目前有兩個主版本並存,這很讓人苦惱。雖然Python 3有許多優於Python 2的特性,但是Python 2的生態系統更為完善,支援的包更多。因為生態系統內部的依賴關係,許多軟體包的執行說明會直接指定“僅適用於Python 2.7版本”。那麼如何在不同的應用場景

輸入文字自動篩選--類似百度的功能onchange與oninput和 onpropertychange 兩者區別

onchange與oninput onpropertychange(加上on用於js)(.change\.input\.propertychange用於jq)   兩者的區別onchange是有兩個條件滿足才能出發這個事件  1.失去游標,焦點2.鍵盤滑鼠改變物件屬性 二者缺

python3第七天輸入和輸出

python3輸入和輸出輸出值的方式:1,表達式。2,print()函數。3,文件對象的write()函數str()函數,返回用戶易讀的表達形式。repr()函數,返回解釋器晚讀的表達形式。可以轉義特殊字符串中的特殊字符input()函數:輸入,返回輸出的對象讀和寫文件: open(filename,m

Python3 永久存儲pickle模塊

clas 存儲 關閉 方便 什麽 利用 str 永久 bsp 1、什麽是永久存儲 “永久存儲”就是將代碼中的數據,如列表,字典等以二進制方式存儲到我們電腦的磁盤中,或者數據庫,或通過網絡傳輸到另一臺計算機上 2、pickle模塊(泡菜模塊) 利

SSM框架的sql中參數註入#和$的區別

沒有 result ddr 其他 防止 date_time ${} ext post 1 <select id="findUsersByUserName2" resultType="java.util.Map" parameterType="Params">

python3.5學習筆記第六章

原本 空白 制表符 false sdh office 元組 所有 n) 本章內容:   正則表達式詳解(re模塊) 1、不使用正則表達式來查找文本的內容   要求從一個字符串中查找電話號碼,並判斷是否匹配制定的模式,如:555-555-5555。傳統的查找方法如下:

服務器端Session和客戶端Session和Cookie區別

也不會 文件存儲 其它 便在 ont 就會 分布式 的區別 部署 Session其實分為客戶端Session和服務器端Session。 當用戶首次與Web服務器建立連接的時候,服務器會給用戶分發一個 SessionID作為標識。SessionID是一個由24個字符組成的隨機

讀懂掌握 Python logging 模塊源碼 附帶一些 example

深度 blog enc 自己 gin reference 文章 amp 常用 搜了一下自己的 Blog 一直缺乏一篇 Python logging 模塊的深度使用的文章。其實這個模塊非常常用,也有非常多的濫用。所以看看源碼來詳細記錄一篇屬於 logging 模塊的文章。 c

用git從遠端倉庫下載程式碼到本地非master分支

問題: 使用 git clone ssh://[email protected]:xxxxxxx.git 預設 clone 的是這個倉庫的 master 分支。如果最新的程式碼不在 master 分支上,該如何拿到呢? 解決辦法: 先檢視分支

python3語言學習筆記五:函式

使用者自定義函式定義規則: 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號 ()。 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。 函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。 函式內容以冒號起始,並且縮排。

python3語言學習筆記二:運算子

算數運算子:加減乘除+-*/,取餘%,冪**,//向下取整除法 比較(關係)運算子:==等於,!=不等於,>大於,<小於,>=大於等於,<=小於等於         返回值均為True或者False,Python3中True與F

重構 改善既有程式碼的設計要點總結一

任何一個傻瓜都能寫出計算機能夠理解的程式,唯有寫出人類容易理解的程式,才是優秀的程式設計師。 定義: 對軟體內部結構的一種調整,目的是在不改變軟體可觀察行為的前提下,提高其可理解性,降低其修改成本 目的: 使軟體更容易被理解和修改。 與之形成對比的是效能

STM32循跡避障小車製作程式碼詳解簡單實現版

寫在最前:最近由於需要製作了一個循跡避障小車,製作比較簡單但是還是出現了很多bug,因此在部落格中記錄一下,希望對後期需要製作的能有所幫助,小車由PWM訊號+L293D驅動。(二輪驅動,第三輪為自由輪) 要求:小車要求循跡避障,有兩種避障策略,在循跡黑線上遇到障礙物停車,循跡黑線外遇到障礙物要避