1. 程式人生 > >python2 與 python3 語法區別

python2 與 python3 語法區別

概述#

幾乎所有的Python 2程式都需要一些修改才能正常地執行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3的實用指令碼(Utility Script),這個指令碼會將你的Python 2程式原始檔作為輸入,然後自動將其轉換到Python 3的形式。案例研究:將chardet移植到Python 3(porting chardet to Python 3)描述瞭如何執行這個指令碼,然後展示了一些它不能自動修復的情況。這篇附錄描述了它能夠自動修復的內容。

print語句#

在Python 2裡,print是一個語句。無論你想輸出什麼,只要將它們放在

print關鍵字後邊就可以。在Python 3裡,print()是一個函式。就像其他的函式一樣,print()需要你將想要輸出的東西作為引數傳給它。

Notes Python 2 Python 3
print print()
print1 print(1)
print1,2 print(1,2)
print1,2, print(1,2,end=' ')
print>>sys.stderr,1,2, 3 print(1,2,3, file=sys.stderr)
  1. 為輸出一個空白行,需要呼叫不帶引數的print()
  2. 為輸出一個單獨的值,需要將這這個值作為print()
    的一個引數就可以了。
  3. 為輸出使用一個空格分隔的兩個值,用兩個引數呼叫print()即可。
  4. 這個例子有一些技巧。在Python 2裡,如果你使用一個逗號(,)作為print語句的結尾,它將會用空格分隔輸出的結果,然後在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3裡,通過把end=' '作為一個關鍵字引數傳給print()可以實現同樣的效果。引數end的預設值為'\n',所以通過重新指定end引數的值,可以取消在末尾輸出回車符。
  5. 在Python 2裡,你可以通過使用>>pipe_name語法,把輸出重定向到一個管道,比如sys.stderr
    。在Python 3裡,你可以通過將管道作為關鍵字引數file的值傳遞給print()來完成同樣的功能。引數file的預設值為std.stdout,所以重新指定它的值將會使print()輸出到一個另外一個管道。

Unicode字串#

Python 2有兩種字串型別:Unicode字串和非Unicode字串。Python 3只有一種型別:Unicode字串(Unicode strings)

Notes Python 2 Python 3
u'PapayaWhip' 'PapayaWhip'
ur'PapayaWhip\foo' r'PapayaWhip\foo'
  1. Python 2裡的Unicode字串在Python 3裡即普通字串,因為在Python 3裡字串總是Unicode形式的。
  2. Unicode原始字串(raw string)(使用這種字串,Python不會自動轉義反斜線"\")也被替換為普通的字串,因為在Python 3裡,所有原始字串都是以Unicode編碼的。

全域性函式unicode()#

Python 2有兩個全域性函式可以把物件強制轉換成字串:unicode()把物件轉換成Unicode字串,還有str()把物件轉換為非Unicode字串。Python 3只有一種字串型別,Unicode字串,所以str()函式即可完成所有的功能。(unicode()函式在Python 3裡不再存在了。)

Notes Python 2 Python 3
unicode(anything) str(anything)

long 長整型#

Python 2有為非浮點數準備的intlong型別。int型別的最大值不能超過sys.maxint,而且這個最大值是平臺相關的。可以通過在數字的末尾附上一個L來定義長整型,顯然,它比int型別表示的數字範圍更大。在Python 3裡,只有一種整數型別int,大多數情況下,它很像Python 2裡的長整型。由於已經不存在兩種型別的整數,所以就沒有必要使用特殊的語法去區別他們。

Notes Python 2 Python 3
x =1000000000000L x =1000000000000
x =0xFFFFFFFFFFFFL x =0xFFFFFFFFFFFF
long(x) int(x)
type(x)islong type(x)isint
isinstance(x,long) isinstance(x,int)
  1. 在Python 2裡的十進位制長整型在Python 3裡被替換為十進位制的普通整數。
  2. 在Python 2裡的十六進位制長整型在Python 3裡被替換為十六進位制的普通整數。
  3. 在Python 3裡,由於長整型已經不存在了,自然原來的long()函式也沒有了。為了強制轉換一個變數到整型,可以使用int()函式。
  4. 檢查一個變數是否是整型,獲得它的資料型別,並與一個int型別(不是long)的作比較。
  5. 你也可以使用isinstance()函式來檢查資料型別;再強調一次,使用int,而不是long,來檢查整數型別。

<> 比較運算子#

Python 2支援<>作為!=的同義詞。Python 3只支援!=,不再支援<>了。

Notes Python 2 Python 3
if x <> y: if x != y:
if x <> y<> z: if x != y!= z:
  1. 簡單地比較。
  2. 相對複雜的三個值之間的比較。

字典類方法has_key()#

在Python 2裡,字典物件的has_key()方法用來測試字典是否包含特定的鍵(key)。Python 3不再支援這個方法了。你需要使用in運算子

Notes Python 2 Python 3
a_dictionary.has_key('PapayaWhip') 'PapayaWhip' in a_dictionary
a_dictionary.has_key(x)or a_dictionary.has_key(y) x in a_dictionaryor y in a_dictionary
a_dictionary.has_key(xor y) (x or y)in a_dictionary
a_dictionary.has_key(x+ y) (x + y)in a_dictionary
x + a_dictionary.has_key(y) x +(y in a_dictionary)
  1. 最簡單的形式。
  2. 運算子or的優先順序高於運算子in,所以這裡不需要新增括號。
  3. 另一方面,出於同樣的原因 — or的優先順序大於in,這裡需要新增括號。(注意:這裡的程式碼與前面那行完全不同。Python會先解釋x or y,得到結果x(如果x在布林上下文裡的值是真)或者y。然後Python檢查這個結果是不是a_dictionary的一個鍵。)
  4. 運算子in的優先順序大於運算子+,所以程式碼裡的這種形式從技術上說不需要括號,但是2to3還是添加了。
  5. 這種形式一定需要括號,因為in的優先順序大於+

返回列表的字典類方法#

在Python 2裡,許多字典類方法的返回值是列表。其中最常用方法的有keysitemsvalues。在Python 3裡,所有以上方法的返回值改為動態檢視(dynamic view)。在一些上下文環境裡,這種改變並不會產生影響。如果這些方法的返回值被立即傳遞給另外一個函式,並且那個函式會遍歷整個序列,那麼以上方法的返回值是列表或者檢視並不會產生什麼不同。在另外一些情況下,Python 3的這些改變干係重大。如果你期待一個能被獨立定址元素的列表,那麼Python 3的這些改變將會使你的程式碼卡住(choke),因為檢視(view)不支援索引(indexing)。

Notes Python 2 Python 3
a_dictionary.keys() list(a_dictionary.keys())
a_dictionary.items() list(a_dictionary.items())
a_dictionary.iterkeys() iter(a_dictionary.keys())
[i for iin a_dictionary.iterkeys()] [i for iin a_dictionary.keys()]
min(a_dictionary.keys()) no change
  1. 使用list()函式將keys()的返回值轉換為一個靜態列表,出於安全方面的考量,2to3可能會報錯。這樣的程式碼是有效的,但是對於使用檢視來說,它的效率低一些。你應該檢查轉換後的程式碼,看看是否一定需要列表,也許檢視也能完成同樣的工作。
  2. 這是另外一種檢視(關於items()方法的)到列表的轉換。2to3values()方法返回值的轉換也是一樣的。
  3. Python 3裡不再支援iterkeys()了。如果必要,使用iter()keys()的返回值轉換成為一個迭代器。
  4. 2to3能夠識別出iterkeys()方法在列表解析裡被使用,然後將它轉換為Python 3裡的keys()方法(不需要使用額外的iter()去包裝其返回值)。這樣是可行的,因為檢視是可迭代的。
  5. 2to3也能識別出keys()方法的返回值被立即傳給另外一個會遍歷整個序列的函式,所以也就沒有必要先把keys()的返回值轉換到一個列表。相反的,min()函式會很樂意遍歷檢視。這個過程對min()max()sum()list()tuple()set()sorted()any()all()同樣有效。

被重新命名或者重新組織的模組#

從Python 2到Python 3,標準庫裡的一些模組已經被重新命名了。還有一些相互關聯的模組也被組合或者重新組織,以使得這種關聯更有邏輯性。

http#

在Python 3裡,幾個相關的HTTP模組被組合成一個單獨的包,即http

Notes Python 2 Python 3
importhttplib import http.client
importCookie import http.cookies
importcookielib import http.cookiejar
importBaseHTTPServerimportSimpleHTTPServerimportCGIHttpServer
import http.server
  1. http.client模組實現了一個底層的庫,可以用來請求HTTP資源,解析HTTP響應。
  2. http.cookies模組提供一個蟒樣的(Pythonic)介面來獲取通過HTTP頭部(HTTP header)Set-Cookie傳送的cookies
  3. 常用的流行的瀏覽器會把cookies以檔案形式存放在磁碟上,http.cookiejar模組可以操作這些檔案。
  4. http.server模組實現了一個基本的HTTP伺服器

urllib#

Python 2有一些用來分析,編碼和獲取URL的模組,但是這些模組就像老鼠窩一樣相互重疊。在Python 3裡,這些模組被重構、組合成了一個單獨的包,即urllib

Notes Python 2 Python 3
importurllib import urllib.request, urllib.parse, urllib.error
importurllib2 import urllib.request, urllib.error
importurlparse import urllib.parse
importrobotparser import urllib.robotparser
from urllib importFancyURLopenerfrom urllib import urlencode
from urllib.request importFancyURLopenerfrom urllib.parse import urlencode
from urllib2 importRequestfrom urllib2 importHTTPError
from urllib.request importRequestfrom urllib.error importHTTPError
  1. 以前,Python 2裡的urllib模組有各種各樣的函式,包括用來獲取資料的urlopen(),還有用來將URL分割成其組成部分的splittype()splithost()splituser()函式。在新的urllib包裡,這些函式被組織得更有邏輯性。2to3將會修改這些函式的呼叫以適應新的命名方案。
  2. 在Python 3裡,以前的urllib2模組被併入了urllib包。同時,以urllib2裡各種你最喜愛的東西將會一個不缺地出現在Python 3的urllib模組裡,比如build_opener()方法,Request物件,HTTPBasicAuthHandler和friends。
  3. Python 3裡的urllib.parse模組包含了原來Python 2裡urlparse模組所有的解析函式。
  4. urllib.robotparse模組解析robots.txt檔案
  5. 處理HTTP重定向和其他狀態碼的FancyURLopener類在Python 3裡的urllib.request模組裡依然有效。urlencode()函式已經被轉移到了urllib.parse裡。
  6. Request物件在urllib.request裡依然有效,但是像HTTPError這樣的常量已經被轉移到了urllib.error裡。

我是否有提到2to3也會重寫你的函式呼叫?比如,如果你的Python 2程式碼裡匯入了urllib模組,呼叫了urllib.urlopen()函式獲取資料,2to3會同時修改import語句和函式呼叫。

Notes Python 2 Python 3
import urllib
print urllib.urlopen('http://diveintopython3.org/').read()
import urllib.request, urllib.parse, urllib.error
print(urllib.request.urlopen('http://diveintopython3.org/').read())

dbm#

所有的DBM克隆(DBM clone)現在在單獨的一個包裡,即dbm。如果你需要其中某個特定的變體,比如GNUDBM,你可以匯入dbm包中合適的模組。

Notes Python 2 Python 3
importdbm import dbm.ndbm
importgdbm import dbm.gnu
importdbhash import dbm.bsd
importdumbdbm import dbm.dumb
importanydbmimport whichdb
import dbm

xmlrpc#

XML-RPC是一個通過HTTP協議執行遠端RPC呼叫的輕重級方法。一些XML-RPC客戶端和XML-RPC服務端的實現庫現在被組合到了獨立的包,即xmlrpc

Notes Python 2 Python 3
importxmlrpclib import xmlrpc.client
importDocXMLRPCServerimportSimpleXMLRPCServer
import xmlrpc.server

其他模組#

Notes Python 2 Python 3
try:importcStringIOasStringIOexceptImportError:importStringIO
import io
try:import cPickle as pickle
exceptImportError:import pickle
import pickle
import__builtin__ import builtins
importcopy_reg import copyreg
importQueue import queue
importSocketServer import socketserver
importConfigParser import configparser
import repr import reprlib
importcommands import subprocess
  1. 在Python 2裡,你通常會這樣做,首先嚐試把cStringIO匯入作為StringIO的替代,如果失敗了,再匯入StringIO。不要在Python 3裡這樣做;io模組會幫你處理好這件事情。它會找出可用的最快實現方法,然後自動使用它。
  2. 在Python 2裡,匯入最快的pickle實現也是一個與上邊相似的能用方法。在Python 3裡,pickle模組會自動為你處理,所以不要再這樣做。
  3. builtins模組包含了在整個Python語言裡都會使用的全域性函式,類和常量。重新定義builtins模組裡的某個函式意味著在每處都重定義了這個全域性函式。這聽起來很強大,但是同時也是很可怕的。
  4. copyreg模組為用C語言定義的使用者自定義型別添加了pickle模組的支援。
  5. queue模組實現一個生產者消費者佇列(multi-producer, multi-consumer queue)。
  6. socketserver模組為實現各種socket server提供了通用基礎類。
  7. configparser模組用來解析INI-style配置檔案。
  8. reprlib模組重新實現了內建函式repr(),並添加了對字串表示被截斷前長度的控制。
  9. subprocess模組允許你建立子程序,連線到他們的管道,然後獲取他們的返回值。

包內的相對匯入#

包是由一組相關聯的模組共同組成的單個實體。在Python 2的時候,為了實現同一個包內模組的相互引用,你會使用import foo或者from foo import Bar。Python 2直譯器會先在當前目錄裡搜尋foo.py,然後再去Python搜尋路徑(sys.path)裡搜尋。在Python 3裡這個過程有一點不同。Python 3不會首先在當前路徑搜尋,它會直接在Python的搜尋路徑裡尋找。如果你想要包裡的一個模組匯入包裡的另外一個模組,你需要顯式地提供兩個模組的相對路徑。

假設你有如下包,多個檔案在同一個目錄下:

chardet/
|
+--__init__.py
|
+--constants.py
|
+--mbcharsetprober.py
|
+--universaldetector.py

現在假設universaldetector.py需要整個匯入constants.py,另外還需要匯入mbcharsetprober.py的一個類。你會怎樣做?

Notes Python 2 Python 3
import constants from.import constants
from mbcharsetproberimportMultiByteCharSetProber from.mbcharsetproberimportMultiByteCharsetProber
  1. 當你需要從包的其他地方匯入整個模組,使用新的from . import語法。這裡的句號(.)即表示當前檔案(universaldetector.py)和你想要匯入檔案(constants.py)之間的相對路徑。在這個樣例中,這兩個檔案在同一個目錄裡,所以使用了單個句號。你也可以從父目錄(from .. import anothermodule)或者子目錄裡匯入。
  2. 為了將一個特定的類或者函式從其他模組裡直接匯入到你的模組的名字空間裡,在需要匯入的模組名前加上相對路徑,並且去掉最後一個斜線(slash)。在這個例子中,mbcharsetprober.pyuniversaldetector.py在同一個目錄裡,所以相對路徑名就是一個句號。你也可以從父目錄(from .. import anothermodule)或者子目錄裡匯入。

迭代器方法next()#

在Python 2裡,迭代器有一個next()方法,用來返回序列裡的下一項。在Python 3裡這同樣成立,但是現在有了一個新的全域性的函式next(),它使用一個迭代器作為引數。

Notes Python 2 Python 3
anIterator.next() next(anIterator)
a_function_that_returns_an_iterator().next() next(a_function_that_returns_an_iterator())
class A:defnext(self):pass
class A:def __next__(self):pass
class A:defnext(self, x, y):pass
no change
next=42for an_iterator in a_sequence_of_iterators:
    an_iterator.next()
next=42for an_iterator in a_sequence_of_iterators:
    an_iterator.__next__()
  1. 最簡單的例子,你不再呼叫一個迭代器的next()方法,現在你將迭代器自身作為引數傳遞給全域性函式next()
  2. 假如你有一個返回值是迭代器的函式,呼叫這個函式然後把結果作為引數傳遞給next()函式。(2to3指令碼足夠智慧以正確執行這種轉換。)
  3. 假如你想定義你自己的類,然後把它用作一個迭代器,在Python 3裡,你可以通過定義特殊方法__next__()來實現。
  4. 如果你定義的類裡剛好有一個next(),它使用一個或者多個引數,2to3執行的時候不會動它。這個類不能被當作迭代器使用,因為它的next()方法帶有引數。
  5. 這一個有些複雜。如果你恰好有一個叫做next的本地變數,在Python 3裡它的優先順序會高於全域性函式next()。在這種情況下,你需要呼叫迭代器的特別方法__next__()來獲取序列裡的下一個元素。(或者,你也可以重構程式碼以使這個本地變數的名字不叫next,但是2to3不會為你做這件事。)

全域性函式filter()#

在Python 2裡,filter()方法返回一個列表,這個列表是通過一個返回值為True或者False的函式來檢測序列裡的每一項得到的。在Python 3裡,filter()函式返回一個迭代器,不再是列表。

Notes Python 2 Python 3
filter(a_function, a_sequence) list(filter(a_function, a_sequence))
list(filter(a_function, a_sequence)) no change
filter(None, a_sequence) [i for iin a_sequence if i]
for i in filter(None, a_sequence): no change
[i for iin filter(a_function, a_sequence)] no change
  1. 最簡單的情況下,2to3會用一個list()函式來包裝filter()list()函式會遍歷它的引數然後返回一個列表。
  2. 然而,如果filter()呼叫已經被list()包裹,2to3不會再做處理,因為這種情況下filter()的返回值是否是一個迭代器是無關緊要的。
  3. 為了處理filter(None, ...)這種特殊的語法,2to3會將這種呼叫從語法上等價地轉換為列表解析。
  4. 由於for迴圈會遍歷整個序列,所以沒有必要再做修改。
  5. 與上面相同,不需要做修改,因為列表解析會遍歷整個序列,即使filter()返回一個迭代器,它仍能像以前的filter()返回列表那樣正常工作。

全域性函式map()#

filter()作的改變一樣,map()函式現在返回一個迭代器。(在Python 2裡,它返回一個列表。)

Notes Python 2 Python 3
map(a_function,'PapayaWhip') list(map(a_function,'PapayaWhip'))
map(None,'PapayaWhip') list('PapayaWhip')
map(lambda x: x+1, range(42)) [x+1for x in range(42)]
for i in map(a_function, a_sequence): no change
[i for iin map(a_function, a_sequence)] no change
  1. 類似對filter()的處理,在最簡單的情況下,2to3會用一個list()函式來包裝map()呼叫。
  2. 對於特殊的map(None, ...)語法,跟filter(None, ...)類似,2to3會將其轉換成一個使用list()的等價呼叫
  3. 如果map()的第一個引數是一個lambda函式,2to3會將其等價地轉換成列表解析。
  4. 對於會遍歷整個序列的for迴圈,不需要做改變。
  5. 再一次地,這裡不需要做修改,因為列表解析會遍歷整個序列,即使map()的返回值是迭代器而不是列表它也能正常工作。

全域性函式reduce()#

在Python 3裡,reduce()函式已經被從全域性名字空間裡移除了,它現在被放置在fucntools模組裡。

Notes Python 2 Python 3
reduce(a, b, c)
from functools import reduce
reduce(a, b, c)

全域性函式apply()#

Python 2有一個叫做apply()的全域性函式,它使用一個函式f和一個列表[a, b, c]作為引數,返回值是f(a, b, c)。你也可以通過直接呼叫這個函式,在列表前新增一個星號(*)作為引數傳遞給它來完成同樣的事情。在Python 3裡,apply()函式不再存在了;必須使用星號標記法。

Notes Python 2 Python 3
apply(a_function, a_list_of_args) a_function(*a_list_of_args)
apply(a_function, a_list_of_args, a_dictionary_of_named_args) a_function(*a_list_of_args,**a_dictionary_of_named_args)
apply(a_function, a_list_of_args+ z) a_function(*a_list_of_args+ z)
apply(aModule.a_function, a_list_of_args) aModule.a_function(*a_list_of_args)
  1. 最簡單的形式,可以通過在引數列表(就像[a, b, c]一樣)前新增一個星號來呼叫函式。這跟Python 2裡的apply()函式是等價的。
  2. 在Python 2裡,apply()函式實際上可以帶3個引數:一個函式,一個引數列表,一個字典命名引數(dictionary of named arguments)。在Python 3裡,你可以通過在引數列表前新增一個星號(*),在字典命名引數前新增兩個星號(**)來達到同樣的效果。
  3. 運算子+在這裡用作連線列表的功能,它的優先順序高於運算子*,所以沒有必要在a_list_of_args + z周圍新增額外的括號。
  4. 2to3指令碼足夠智慧來轉換複雜的apply()呼叫,包括呼叫匯入模組裡的函式。

全域性函式intern()#

在Python 2裡,你可以用intern()函式作用在一個字串上來限定(intern)它以達到效能優化。在Python 3裡,intern()函式被轉移到sys模組裡了。

Notes Python 2 Python 3
intern(aString) sys.intern(aString)

exec語句#

就像print語句在Python 3裡變成了一個函式一樣,exec語句也是這樣的。exec()函式使用一個包含任意Python程式碼的字串作為引數,然後就像執行語句或者表示式一樣執行它。exec()eval()是相似的,但是exec()更加強大並更具有技巧性。eval()函式只能執行單獨一條表示式,但是exec()能夠執行多條語句,匯入(import),函式宣告 — 實際上整個Python程式的字串表示也可以。

Notes Python 2 Python 3
exec codeString exec(codeString)
exec codeString in a_global_namespace exec(codeString, a_global_namespace)
exec codeString in a_global_namespace, a_local_namespace exec(codeString, a_global_namespace, a_local_namespace)
  1. 在最簡單的形式下,因為exec()現在是一個函式,而不是語句,2to3會把這個字串形式的程式碼用括號圍起來。
  2. Python 2裡的exec語句可以指定名字空間,程式碼將在這個由全域性物件組成的私有空間裡執行。Python 3也有這樣的功能;你只需要把這個名字空間作為第二個引數傳遞給exec()函式。
  3. 更加神奇的是,Python 2裡的exec語句還可以指定一個本地名字空間(比如一個函式裡宣告的變數)。在Python 3裡,exec()函式也有這樣的功能。

execfile語句#

就像以前的exec語句,Python 2裡的execfile語句也可以像執行Python程式碼那樣使用字串。不同的是exec使用字串,而execfile則使用檔案。在Python 3裡,execfile語句已經被去掉了。如果你真的想要執行一個檔案裡的Python程式碼(但是你不想匯入它),你可以通過開啟這個檔案,讀取它的內容,然後呼叫compile()全域性函式強制Python直譯器編譯程式碼,然後呼叫新的exec()函式。

Notes Python 2 Python 3
execfile('a_filename') exec(compile(open('a_filename').read(),'a_filename','exec'))

repr(反引號)#

在Python 2裡,為了得到一個任意物件的字串表示,有一種把物件包裝在反引號裡(比如`x`)的特殊語法。在Python 3裡,這種能力仍然存在,但是你不能再使用反引號獲得這種字串表示了。你需要使用全域性函式repr()

Notes Python 2 Python 3
`x` repr(x)
`'PapayaWhip' + `2`` repr('PapayaWhip'+ repr(2))
  1. 記住,x可以是任何東西 — 一個類,函式,模組,基本資料型別,等等。repr()函式可以使用任何型別的引數。
  2. 在Python 2裡,反引號可以巢狀,導致了這種令人費解的(但是有效的)表示式。2to3足夠智慧以將這種巢狀呼叫轉換到repr()函式。

try...except語句

相關推薦

python2 python3 語法區別

概述# 幾乎所有的Python 2程式都需要一些修改才能正常地執行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3的實用指令碼(Utility Script),這個指令碼會將你的Python 2程式原始檔作為輸入,然後自動將其轉換到

Python2Python3區別收集

python3 列表 2.7 tel edits str more 推導 test 1、python2中,在列表推導中for關鍵字之後的賦值操作可能會影響到列表推導上下文中的同名變量: Python 2.7.8 (default, Jun 30 2014, 16:03:49

Python中的元組,字典、計算器代碼實例及python2python3區別

所有 time tor result inpu __name__ 字符 img 歡迎來到 1.計算器實例#/usr/bin/env python # -*- coding:utf-8 -*- # @time :2018/1/22 21:09 # @Author :Fen

Python2Python3區別

enc 區別 col 編碼方式 windows asc 運行 問題 現在   python2與python3的區別:   (1)python2 默認編碼方式是ASCII碼(不識別中文),python3 默認編碼方式是utf-8(識別中文)。所以想要在python2中支持

Python基礎-python的輸入輸出(python2python3區別);算術運算子

程式:輸入(鍵盤)----程式碼(java/python/c)----輸出(螢幕) #每一行程式碼只負責完成一個動作 #print的作用:把內容輸出到螢幕上來 #python是一個格式非常嚴格的程式設計語言,每行程式碼前面都不要增加空格 輸入: 1.1 pyhon2*

python2 python3區別

原文出自 幾乎所有的python2程式都需要一些修改才能正常的執行在python3的環境下。為了簡化這個轉換過程,Python3自帶了一個2to3的實用指令碼.這個指令碼會將python2程式原始檔作為輸入,然後自動轉換到python3.但並不是所有內容都可以自動轉換。

Python2Python3區別(八):commandssubprocess

36.16. commands — Utilities for running commands Deprecated since version 2.6: The commands module has been removed in Python 3. U

Python2Python3區別(七):Python3使用mysqldb的方法

MySQLdb只支援Python2.,還不支援3. 可以用PyMySQL代替。 安裝方法: pip install PyMySQL 然後在需要的專案中,把 init.py中新增兩行: import pymysql pymysql.install_a

Python2Python3區別

抽象 傳參數 super() peer bytes 當前 內部函數 優化 使用 前言:目前python兩個版本Python2與Python3同時存在,並且這兩個版本都在維護更新,但是Python2應該在2020年就停止維護更新了,那麽到底選擇Python2還

(個人記錄)Python2 Python3的版本區別

字節 title border idt == 編碼 補全 默認 異常信息 現在還有些開源模塊還沒有更新到python3 ,不了解版本區別,無法對不合適的地方進行更改。 由於只追求向Python3靠近,所以對於python2的特別用法不探究。 此文不補全所有版本區別

python2python3中編碼解碼的區別

需要 顯示 數據類型 在屏幕上 nbsp gb2312 python2 想要 區別 python2中程序默認數據類型為ASCII, 所以需要先將數據解碼(decode)成為Unicode類型, 然後再編碼(encode)成為想要轉換的數據類型(gbk,utf-8,gb180

python2python3區別

pytho ascii碼 混亂 區別 去除 統一 utf-8 python 重復 (1)python2與python3區別 宏觀:python2源碼不標準,混亂,重復代碼多 python3統一標準,去除重復代碼 (2)p

使用python2python3中md5的區別以及需要注意的地方

你可能不知道的是,有很多字元,使用python2和python3的md5加密出來的結果是不一樣的     # python2.7 zfc = "xxx" + chr(163) + "fj" cd = hashlib.md5(zfc).h

python2python3的主要區別

print 在進行程式除錯時用得最多的語句可能就是 print,在 Python 2 中,print 是一條語句,而 Python3 中作為函式存在。有人可能就有疑問了,在 Python2 中明明也看到當函式使用: # py2 print("hello") # 等價 print ("hell

python2python3的簡單區別

1、表示式 在 Python 2 中為獲得計算表示式,你會鍵入: X = raw_input ("enter some values) 但在 Python 3 中,你會鍵入: X = input ("enter some values") 因此,

Python---round函式四捨五入詳解之python2python3版本間區別

round()方法返回 數值 的小數點四捨五入到n個數字。 語法 以下是round()方法的語法: round( x [, n] ) 引數     x --這是一個數值,表示需要格式化的數值     n --這也是一個數值,表示小數點後保留多少位 返回值 該方法返回 數值x 的小數點四捨五入

Python2 Python3 區別

Python2 中 print 用法為 print "Hello World"Python3 中 print 用法為 print("Hello World") Python2 中的 input() 函式:獲取當前輸入的內容,並將其作為數字型別來處理Python3 中的 input() 函式:獲取當前輸入的內

python2 python3 的一些區別

1、print函式python2:print語句 ( Python2 中若把 print 當函式使用,那麼可以匯入 future 模組 中的 print_function)Python3:print函式

關於Python2python3共存的一點補充

python2 python3 本人實驗是在windows下cmd環境下完成的。 py -2與py -3分別指定運行python2和python3。但python命令依然可以使用,默認進入python3,virtualenv是使用pip3安裝的,只能新建python3的虛擬環境。 py -2

win10下安裝python2python3以及pip共存

用戶目錄 strong exe 路徑 org enc setup 最新版 .com 一 分別安裝python2和python3 註意: 安裝時記得勾選 Add Python.exe to Path 二 安裝pip Python3最新版本有pip,無需安裝 Pytho