保持學習的態度,學一門動態語言實際上是很早之前的就準備要作的事情,當時還在糾結python與ruby。如今不僅僅是要學python,還在考慮用它作點什麼,這些等後續再說吧,由於看的是python2.x的書籍。用的是python 3.7.因此先把二者的區別記錄一下,僅限於基礎。python
print語句沒有了,取而代之的是print()函數。linux
py 2.x:python3.x
print "wyl" #語句 print("wyl")
py 3.x:ruby
>> print("wyl") wyl >>> print 'wyl' SyntaxError: Missing parentheses in call to 'print'. Did you mean print('wyl')?
Python 2 有 ASCII str() 類型,unicode() 是單獨的,不是 byte 類型。cookie
如今, 在 Python 3,咱們最終有了 Unicode (utf-8) 字符串,以及一個字節類:byte 和 bytearrays。app
因爲 Python3.X 源碼文件默認使用utf-8編碼,這就使得如下代碼是合法的:socket
py 2.xide
>>> str='王延領那小子真帥' >>> str 'xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
py 3.x函數
>>> str='王延領那小子真帥' >>> str '王延領那小子真帥' >>>
Python中的除法有兩個運算符,/和//學習
首先來講/除法:
在python 2.x中/除法就跟咱們熟悉的大多數語言,好比Java啊C#啊差很少,取整,把小數部分徹底忽略掉。
在python 3.x中/除法再也不這麼作了,對於整數之間的相除,結果也會是浮點數。
py 2.x
>>> 1/2 0 >>>
py 3.x
>>> 1/2
0.5
>>>
第二種//除法:
這種除法叫作floor除法,py2.x與py3.x相同
py2.x py3.x
>>> 1//2
0
>>>
在 py3.x 中咱們如今使用 as 做爲關鍵詞,而非‘,’
因此異常都從 BaseException繼承,並刪除了StardardError
去除了異常類的序列行爲和.message屬性
用 raise Exception(args)代替 raise Exception, args語法
捕獲異常的語法改變,引入了as關鍵字來標識異常實例
py3.0:
>>> try: 1/0 except Exception , err: print err SyntaxError: invalid syntax >>> #正確的寫法 >>> try: 1/0 except Exception as err: print(err) division by zero >>>
xrange() 更名爲range(),要想使用range()得到一個list,必須顯式調用:
py 2.x
>>> range(1,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
py3.x
>>> range(10) range(0, 10) >>>
py3.x 若是想使用range(),能夠結合list
>>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>
python 八進制不能0開頭而是以0o開頭
py 3.x
>>> 0101 SyntaxError: invalid token >>> 0o101 65 >>>
不等運算py3.x只有「!=」,「<>」已被移除
py3.x
>>> 1!=3 True >>> 1<>3 SyntaxError: invalid syntax >>>
py3.x
>>> s=`wyl` SyntaxError: invalid syntax >>> s='wyl' >>> repr(s) "'wyl'"
舊的名字 | 新的名字 |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
repr | reprlib |
StringIO模塊如今被合併到新的io模組內。 new, md5, gopherlib等模塊被刪除。
Python 2.6已經支援新的io模組。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合併到http包內。
取消了exec語句,只剩下exec()函數。 Python 2.6已經支援exec()函數。
py 3.x
1>去掉了long
2>新增了bytes類型,對應於2.X版本的八位串
3>dict的.keys()、.items 和.values()方法返回迭代器,而以前的iterkeys()等函數都被廢棄。同時去掉的還有 dict.has_key(),用 in替代它吧 。
1>引入抽象基類(Abstraact Base Classes,ABCs)
2>容器類和迭代器類被ABCs化,因此cellections模塊裏的類型比Py2.x多了不少
>>> import collections >>> print('\n'.join(dir(collections))) AsyncGenerator AsyncIterable AsyncIterator Awaitable ByteString Callable ChainMap Collection Container Coroutine Counter Generator Hashable ItemsView Iterable Iterator KeysView Mapping MappingView MutableMapping MutableSequence MutableSet OrderedDict Reversible Sequence Set Sized UserDict UserList UserString ValuesView _Link _OrderedDictItemsView _OrderedDictKeysView _OrderedDictValuesView __all__ __builtins__ __cached__ __doc__ __file__ __loader__ __name__ __package__ __path__ __spec__ _chain _collections_abc _count_elements _eq _heapq _iskeyword _itemgetter _nt_itemgetters _proxy _recursive_repr _repeat _starmap _sys abc defaultdict deque namedtuple >>>
3>迭代器的next()方法更名爲__next__(),並增長內置函數next(),用以調用迭代器的__next__()方法
4>增長了@abstractmethod和 @abstractproperty兩個 decorator,編寫抽象方法(屬性)更加方便。
1>移除了cPickle模塊,可使用pickle模塊代替。最終咱們將會有一個透明高效的模塊。
2>移除了imageop模塊
3>移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模塊
5>移除了new模塊
6>os.tmpnam()和os.tmpfile()函數被移動到tmpfile模塊下
7>tokenize模塊如今使用bytes工做。主要的入口點再也不是generate_tokens,而是 tokenize.tokenize()