保持学习的态度,学一门动态语言实际上是很早之前的就准备要作的事情,当时还在纠结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()