python2版本和python3版本的區(qū)別,兩者對比如下
創(chuàng)新互聯(lián)專注于朝陽縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),購物商城網(wǎng)站建設(shè)。朝陽縣網(wǎng)站建設(shè)公司,為朝陽縣等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
核心類差異
1. Python3 對 Unicode 字符的原生支持。
Python2 中使用 ASCII 碼作為默認(rèn)編碼方式導(dǎo)致 string 有兩種類型 str 和 unicode,Python3 只
支持 unicode 的 string。Python2 和 Python3 字節(jié)和字符對應(yīng)關(guān)系為:
2. Python3 采用的是絕對路徑的方式進(jìn)行 import
Python2 中相對路徑的 import 會導(dǎo)致標(biāo)準(zhǔn)庫導(dǎo)入變得困難(想象一下,同一目錄下有 file.py,如
何同時(shí)導(dǎo)入這個(gè)文件和標(biāo)準(zhǔn)庫 file)。Python3 中這一點(diǎn)將被修改,如果還需要導(dǎo)入同一目錄的文件必
須使用絕對路徑,否則只能使用相關(guān)導(dǎo)入的方式來進(jìn)行導(dǎo)入。
3. Python2 中存在老式類和新式類的區(qū)別,Python3 統(tǒng)一采用新式類。新式類聲明要求繼承 object,
必須用新式類應(yīng)用多重繼承。
4. Python3 使用更加嚴(yán)格的縮進(jìn)。Python2 的縮進(jìn)機(jī)制中,1 個(gè) tab 和 8 個(gè) space 是等價(jià)的,所
以在縮進(jìn)中可以同時(shí)允許 tab 和 space 在代碼中共存。這種等價(jià)機(jī)制會導(dǎo)致部分 IDE 使用存在問題。
Python3 中 1 個(gè) tab 只能找另外一個(gè) tab 替代,因此 tab 和 space 共存會導(dǎo)致報(bào)錯(cuò):TabError:
inconsistent use of tabs and spaces in indentation.
python學(xué)習(xí)網(wǎng),免費(fèi)的python學(xué)習(xí)網(wǎng)站,歡迎在線學(xué)習(xí)!
廢棄類差異
1. print 語句被 Python3 廢棄,統(tǒng)一使用 print 函數(shù)
2. exec 語句被 python3 廢棄,統(tǒng)一使用 exec 函數(shù)
3. execfile 語句被 Python3 廢棄,推薦使用 exec(open("./filename").read())
4. 不相等操作符""被 Python3 廢棄,統(tǒng)一使用"!="
5. long 整數(shù)類型被 Python3 廢棄,統(tǒng)一使用 int
6. xrange 函數(shù)被 Python3 廢棄,統(tǒng)一使用 range,Python3 中 range 的機(jī)制也進(jìn)行修改并提高
了大數(shù)據(jù)集生成效率
7. Python3 中這些方法再不再返回 list 對象:dictionary 關(guān)聯(lián)的 keys()、values()、items(),zip(),
map(),filter(),但是可以通過 list 強(qiáng)行轉(zhuǎn)換:
1. mydict={"a":1,"b":2,"c":3}
2. mydict.keys() #built-in method keys of dict object at 0x000000000040B4C8
3. list(mydict.keys()) #['a', 'c', 'b']
8. 迭代器 iterator 的 next()函數(shù)被 Python3 廢棄,統(tǒng)一使用 next(iterator)
9. raw_input 函數(shù)被 Python3 廢棄,統(tǒng)一使用 input 函數(shù)
10. 字典變量的 has_key 函數(shù)被 Python 廢棄,統(tǒng)一使用 in 關(guān)鍵詞
11. file 函數(shù)被 Python3 廢棄,統(tǒng)一使用 open 來處理文件,可以通過 io.IOBase 檢查文件類型
12. apply 函數(shù)被 Python3 廢棄
13. 異常 StandardError 被 Python3 廢棄,統(tǒng)一使用 Exception
修改類差異
1. 浮點(diǎn)數(shù)除法操作符“/”和“//”的區(qū)別
“ / ”:
Python2:若為兩個(gè)整形數(shù)進(jìn)行運(yùn)算,結(jié)果為整形,但若兩個(gè)數(shù)中有一個(gè)為浮點(diǎn)數(shù),則結(jié)果為
浮點(diǎn)數(shù);
Python3:為真除法,運(yùn)算結(jié)果不再根據(jù)參加運(yùn)算的數(shù)的類型。
“//”:
Python2:返回小于除法運(yùn)算結(jié)果的最大整數(shù);從類型上講,與"/"運(yùn)算符返回類型邏輯一致。
Python3:和 Python2 運(yùn)算結(jié)果一樣。
2. 異常拋出和捕捉機(jī)制區(qū)別
Python2
1. raise IOError, "file error" #拋出異常
2. except NameError, err: #捕捉異常
Python3
1. raise IOError("file error") #拋出異常
2. except NameError as err: #捕捉異常
3. for 循環(huán)中變量值區(qū)別
Python2,for 循環(huán)會修改外部相同名稱變量的值
1. i = 1
2. print ('comprehension: ', [i for i in range(5)])
3. print ('after: i =', i ) #i=4
Python3,for 循環(huán)不會修改外部相同名稱變量的值
1. i = 1
2. print ('comprehension: ', [i for i in range(5)])
3. print ('after: i =', i ) #i=1
4. round 函數(shù)返回值區(qū)別
Python2,round 函數(shù)返回 float 類型值
1. isinstance(round(15.5),int) #True
Python3,round 函數(shù)返回 int 類型值
1. isinstance(round(15.5),float) #True
5. 比較操作符區(qū)別
Python2 中任意兩個(gè)對象都可以比較
1. 11 'test' #True
Python3 中只有同一數(shù)據(jù)類型的對象可以比較
1. 11 'test' # TypeError: unorderable types: int() str()
Python2 的 map 函數(shù)將函數(shù) func 應(yīng)用到一個(gè)序列的每個(gè)元素,或者多個(gè)序列的相同索引位置對應(yīng)的元素,最終返回一個(gè) list。
Python3 的 map 函數(shù)與 Python2 功能一致,最后返回的是一個(gè) map 對象??梢酝ㄟ^ list() 函數(shù)將 map 對象轉(zhuǎn)為一個(gè) list 列表。
python的常用內(nèi)置函數(shù)
1.abs() 函數(shù)返回?cái)?shù)字的絕對值
abs(-40)=40
2. dict() 函數(shù)用于創(chuàng)建一個(gè)字典
dict()
{} ? ? ?#創(chuàng)建一個(gè)空字典類似于u={},字典的存取方式一般為key-value
例如u = {"username":"tom", ?"age":18}
3. help() 函數(shù)用于查看函數(shù)或模塊用途的詳細(xì)說明
help('math')查看math模塊的用處
a=[1,2,3,4]
help(a)查看列表list幫助信息
4.dir()獲得當(dāng)前模塊的屬性列表
dir(help)
['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
5.min() 方法返回給定參數(shù)的最小值 /參數(shù)可以為序列
a=? min(10,20,30,40)
a
10
6. next() 返回迭代器的下一個(gè)項(xiàng)目
it = iter([1, 2, 3, 4, 5])
next(it)
1
next(it)
2
7. id() 函數(shù)用于獲取對象的內(nèi)存地址
a=12
id(a)
1550569552
8.enumerate() 函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在 for 循環(huán)當(dāng)中。
a=["tom","marry","leblan"]
list(enumerate(a))
[(0, 'tom'), (1, 'marry'), (2, 'leblan')]
9. oct() 函數(shù)將一個(gè)整數(shù)轉(zhuǎn)換成8進(jìn)制字符串
oct(15)
'0o17'
oct(10)
'0o12'
10. bin() 返回一個(gè)整數(shù) int 或者長整數(shù) long int 的二進(jìn)制表示
bin(10)
'0b1010'
bin(15)
'0b1111'
11.eval() 函數(shù)用來執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值
eval('2+2')
4
12.int() 函數(shù)用于將一個(gè)字符串會數(shù)字轉(zhuǎn)換為整型
int(3)
3
int(3.6)
3
int(3.9)
3
int(4.0)
4
13.open() 函數(shù)用于打開一個(gè)文件,創(chuàng)建一個(gè)file對象,相關(guān)的方法才可以調(diào)用它進(jìn)行讀寫
f=open('test.txt')
14.str() 函數(shù)將對象轉(zhuǎn)化為適于人閱讀的形式
str(3)
'3'
15. bool() 函數(shù)用于將給定參數(shù)轉(zhuǎn)換為布爾類型,如果沒有參數(shù),返回 False
bool()
False
bool(1)
True
bool(10)
True
bool(10.0)
True
16.isinstance() 函數(shù)來判斷一個(gè)對象是否是一個(gè)已知的類型
a=5
isinstance(a,int)
True
isinstance(a,str)
False
17. sum() 方法對系列進(jìn)行求和計(jì)算
sum([1,2,3],5)
11
sum([1,2,3])
6
18. super() 函數(shù)用于調(diào)用下一個(gè)父類(超類)并返回該父類實(shí)例的方法。super 是用來解決多重繼承問題的,直接用類名調(diào)用父類方法
class ? User(object):
? def__init__(self):
class Persons(User):
? ? ? ? super(Persons,self).__init__()
19. float() 函數(shù)用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)
float(1)
1.0
float(10)
10.0
20. iter() 函數(shù)用來生成迭代器
a=[1,2,3,4,5,6]
iter(a)
for i in iter(a):
... ? ? ? ? print(i)
...
1
2
3
4
5
6
21.tuple 函數(shù)將列表轉(zhuǎn)換為元組
a=[1,2,3,4,5,6]
tuple(a)
(1, 2, 3, 4, 5, 6)
22.len() 方法返回對象(字符、列表、元組等)長度或項(xiàng)目個(gè)數(shù)
s = "playbasketball"
len(s)
14
a=[1,2,3,4,5,6]
len(a)
6
23. property() 函數(shù)的作用是在新式類中返回屬性值
class User(object):
?def __init__(self,name):
? ? ? ? ? self.name = name
def get_name(self):
? ? ? ? ? return self.get_name
@property
?def name(self):
? ? ? ? ?return self_name
24.type() 函數(shù)返回對象的類型
25.list() 方法用于將元組轉(zhuǎn)換為列表
b=(1,2,3,4,5,6)
list(b)
[1, 2, 3, 4, 5, 6]
26.range() 函數(shù)可創(chuàng)建一個(gè)整數(shù)列表,一般用在 for 循環(huán)中
range(10)
range(0, 10)
range(10,20)
range(10, 20)
27. getattr() 函數(shù)用于返回一個(gè)對象屬性值
class w(object):
... ? ? ? ? ? ? s=5
...
a = w()
getattr(a,'s')
5
28. complex() 函數(shù)用于創(chuàng)建一個(gè)復(fù)數(shù)或者轉(zhuǎn)化一個(gè)字符串或數(shù)為復(fù)數(shù)。如果第一個(gè)參數(shù)為字符串,則不需要指定第二個(gè)參數(shù)
complex(1,2)
(1+2j)
complex(1)
(1+0j)
complex("1")
(1+0j)
29.max() 方法返回給定參數(shù)的最大值,參數(shù)可以為序列
b=(1,2,3,4,5,6)
max(b)
6
30. round() 方法返回浮點(diǎn)數(shù)x的四舍五入值
round(10.56)
11
round(10.45)
10
round(10.45,1)
10.4
round(10.56,1)
10.6
round(10.565,2)
10.56
31. delattr 函數(shù)用于刪除屬性
class Num(object):
...? ? a=1
...? ? b=2
...? ? c=3.
.. print1 = Num()
print('a=',print1.a)
a= 1
print('b=',print1.b)
b= 2
print('c=',print1.c)
c= 3
delattr(Num,'b')
print('b=',print1.b)
Traceback (most recent call last):? File "", line 1, inAttributeError: 'Num' object has no attribute 'b'
32. hash() 用于獲取取一個(gè)對象(字符串或者數(shù)值等)的哈希值
hash(2)
2
hash("tom")
-1675102375494872622
33. set() 函數(shù)創(chuàng)建一個(gè)無序不重復(fù)元素集,可進(jìn)行關(guān)系測試,刪除重復(fù)數(shù)據(jù),還可以計(jì)算交集、差集、并集等。
a= set("tom")
b = set("marrt")
a,b
({'t', 'm', 'o'}, {'m', 't', 'a', 'r'})
ab#交集
{'t', 'm'}
a|b#并集
{'t', 'm', 'r', 'o', 'a'}
a-b#差集
{'o'}
python2的map(function, list)函數(shù)直接返回一個(gè)list
此時(shí)返回的是迭代器,需要加一個(gè)list作用于map
int型數(shù)據(jù)是不能被用于迭代的,所以map的list入?yún)⒌脑夭荒苁钦麛?shù),即
故list中的元素類型可以是str,list等
Python 有很多有用的內(nèi)置函數(shù), 但還是不能滿足程序員的需求, 所以需要 自定義函數(shù) 。
如何編寫 自定義函數(shù) , 需要用到 def語句, 函數(shù)名, 括號及參數(shù), 冒號, 函數(shù)說明,內(nèi)置縮進(jìn)編碼模塊,return 語句 , 其中有一些也可省略不寫,后面會慢慢介紹。
編寫函數(shù)不可或缺的元素, 一定都要寫。函數(shù)名盡量寫得簡單易懂。
一般是對函數(shù)的描述說明。
這是編寫具體的 操作命令 的地方, 如果還未想好如何編寫, 可以使用 pass 來占位,讓程序可以運(yùn)行起來,防止調(diào)試出錯(cuò)。
參數(shù)放在最后講, 是因?yàn)檫@里面的東西還是很多的。首先看個(gè)例子。
如上的案例都是限制了參數(shù)個(gè)數(shù)的, 最多傳三個(gè)參數(shù) name/age/city , 但是如果有一些特例,需要傳多個(gè)參數(shù)怎么辦呢。 參數(shù)前面加個(gè) * , 變成 可變參數(shù) 。
那如果想要傳多個(gè)包含名稱的參數(shù),例如a=1,b=2,c=3......,那該怎么寫呢。參數(shù)前面加個(gè) ** , 變成 關(guān)鍵字參數(shù) 。
1.1 例如:print(hex(2))案例
1.2 輸出函數(shù):print(hex(2))
1.3 輸出結(jié)果:0x2
1.4 解析說明:返回16進(jìn)制的數(shù)。
2.1 例如:print(chr(10))案例
2.2 輸出函數(shù):print(chr(10))
2.3 輸出結(jié)果:0o12
2.4 解析說明:返回當(dāng)前整數(shù)對應(yīng)的ASCll碼
3.1 例如:print(ord("b"))案例
3.2 輸出函數(shù):print(ord("b"))
3.3 輸出結(jié)果:98
3.4 解析說明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)
4.1 例如:print(chr(97))
4.2 輸出函數(shù):print(chr(97))
4.3 輸出結(jié)果:b
4.4 解析說明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)。
案例一:給你一個(gè)字符串,s = 'hello kitty'
1.1 輸出函數(shù):print(s.capitalize())
1.2 輸出結(jié)果:0x2
1.3 解析說明:返回16進(jìn)制的數(shù)。
2.1輸出函數(shù):print(s.replace('kitty','kuang'))
2.2 輸出結(jié)果:hello kuang
2.3 解析說明:替換功能,將kitty換成kuang。
2.4 輸出函數(shù):print(s.replace('4','KK'))
2.5 輸出結(jié)果:12KK12KK
2.6 解析說明:所有的4都替換成KK
2.7 輸出函數(shù):print(s.replace('4','KK'))
2.8 輸出結(jié)果:12KK12KK124
2.9 解析說明:將前兩個(gè)的4替換成go
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.1 輸出函數(shù):print(ip.split(','))
3.2 輸出結(jié)果:['192.168.1.1']
3.3 解析說明:將字符串分割成列表
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.3 輸出函數(shù):print(ip.split(',',2))
3.4 輸出結(jié)果:['192.168.1.1']
3.5 解析說明:從第二個(gè)開始分割成列表