python2與python3之間的主要區別
py2:print語句,語句就意味着可以直接跟要打印的東西,如果后面接的是一個元組對象,直接打印
py3:print函數,函數就以為這必須要加上括號才能調用,如果接元組對象,可以接收多個位置參數,並可以打印
如果希望在 Python2 中 把 print 當函數使用,那么可以導入 future 模塊 中的 print_function
下面有個示例:
# py2
>>> print("hello", "world")
('hello', 'world')
# py3
>>> print("hello", "world")
hello world
# py2
>>> print("hello", "world")
('hello', 'world')
>>> from __future__ import print_function
>>> print("hello", "world")
hello world
- 輸入函數
py2:input_raw()
py3:input()
- 在使用super()的不同
py2:必須顯示的在參數中寫上基類
py:直接無參數調用即可
- 1/2的結果
py2:返回0
py3:返回0.5,沒有了int和long的區別
- 編碼
py2:默認編碼ascii
py3:默認編碼utf-8
而且為了在py2中使用中文,在頭部引入coding聲明,不推薦使用
- 字符串
py2:unicode類型表示字符串序列,str類型表示字節序列
py3::str類型表示字符串序列,byte類型表示字節序列
- True和False
py2:True 和 False 在 Python2 中是兩個全局變量,可以為其賦值或者進行別的操作,初始數值分別為1和0,雖然修改是違背了python設計的原則,但是確實可以更改
py3:修正了這個變量,讓True或False不可變
- 迭代器
py2:當中許多返回列表的方法,如range,字典對象的 dict.keys()、dict.values() 方法, map、filter、zip;並且迭代器必須實現next方法
py3:將返回列表的方法改為了返回迭代器對象,內置了__next__,不用特意去實現next
- nonlocal
py2:沒有辦法在嵌套函數中將變量聲明為一個非局部變量,只能在函數中聲明全局變量
py3:nonlocal方法實現了,示例如下:
def func():
c = 1
def foo():
c = 12
foo()
print(c)
func() #1
def func():
c = 1
def foo():
nonlocal c
c = 12
foo()
print(c)
func() # 12