为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。
许多针对早期Python版本设计的程式都无法在Python 3.0上正常实行。
为了照顾现有程式,Python 2.6作为一个过渡版本,基本利用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,许可利用部分Python 3.0的语法与函数。
新的Python程式建议利用Python 3.0版本的语法。
除非实行环境无法安装Python 3.0或者程式本身利用了不增援Python 3.0的第三方库。目前不增援Python 3.0的第三方库有Twisted, py2exe, PIL等。
大多数第三方库都正在努力地相容Python 3.0版本。纵然无法立即利用Python 3.0,也建议编写相容Python 3.0版本的程式,然后利用Python 2.6, Python 2.7来实行。
Python 3.0的变革紧张在以下几个方面:
print 函数
print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:
print \"大众fish\"大众print (\"大众fish\公众) #把稳print后面有个空格print(\公众fish\"大众) #print()不能带有任何其它参数
然而,Python 2.6实际已经支持新的print()语法:
from __future__ import print_functionprint(\公众fish\"大众, \公众panda\"大众, sep=', ')
Unicode
Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。
现在, 在 Python 3,我们终极有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。
由于 Python3.X 源码文件默认利用utf-8编码,这就使得以下代码是合法的:
>>> 中国 = 'china'>>>print(中国)china
Python 2.x
>>> str = \公众我爱北京天安门\"大众>>> str'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'>>> str = u\"大众我爱北京天安门\公众>>> stru'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'
Python 3.x
>>> str = \公众我爱北京天安门\公众>>> str'我爱北京天安门'
除法运算
Python中的除法较其它措辞显得非常高端,有套很繁芜的规则。Python中的除法有两个运算符,/和//
首先来说/除法:
在python 2.x中/除法就跟我们熟习的大多数措辞,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完备忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。
在python 3.x中/除法不再这么做了,对付整数之间的相除,结果也会是浮点数。
Python 2.x:
>>> 1 / 20>>> 1.0 / 2.00.5
Python 3.x:
>>> 1/20.5
而对付//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是同等的。
python 2.x:
>>> -1 // 2-1
python 3.x:
>>> -1 // 2-1
把稳的是并不是舍弃小数部分,而是实行floor操作,如果要截取小数部分,那么须要利用math模块的trunc函数
python 3.x:
>>> import math>>> math.trunc(1 / 2)0>>> math.trunc(-1 / 2)0
非常
在 Python 3 中处理非常也轻微的改变了,在 Python 3 中我们现在利用 as 作为关键词。
捕获非常的语法由 except exc, var 改为 except exc as var。
利用语法except (exc1, exc2) as var可以同时捕获多种类别的非常。 Python 2.6已经支持这两种语法。
1. 在2.x时期,所有类型的工具都是可以被直接抛出的,在3.x时期,只有继续自BaseException的工具才可以被抛出。
2. 2.x raise语句利用逗号将抛出工具类型和参数分开,3.x取消了这种奇葩的写法,直接调用布局函数抛出工具即可。
在2.x时期,非常在代码中除了表示程序缺点,还常常做一些普通掌握构造该当做的事情,在3.x中可以看出,设计者让非常变的更加专一,只有在缺点发生的情形才能去用非常捕获语句来处理。
xrange
在 Python 2 中 xrange() 创建迭代工具的用法是非常盛行的。比如: for 循环或者是列表/凑集/字典推导式。
这个表现十分像天生器(比如。\公众惰性求值\"大众)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。只管如此,比拟迭代一次,不建议你重复迭代多次,由于天生器每次都从头开始。
在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名非常)。
import timeitn = 10000def test_range(n):return for i in range(n):passdef test_xrange(n):for i in xrange(n):pass
Python 2
print 'Python', python_version()print '\ntiming range()'%timeit test_range(n)print '\n\ntiming xrange()'%timeit test_xrange(n)Python 2.7.6timing range()1000 loops, best of 3: 433 µs per looptiming xrange()1000 loops, best of 3: 350 µs per loop
Python 3
print('Python', python_version())print('\ntiming range()')%timeit test_range(n)Python 3.4.1timing range()1000 loops, best of 3: 520 µs per loop
print(xrange(10))---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-5-5d8f9b79ea70> in <module>()----> 1 print(xrange(10))NameError: name 'xrange' is not defined
八进制字面量表示
八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。
在Python 3.x中,表示八进制字面量的办法只有一种,便是0o1000。
python 2.x
>>> 0o1000512>>> 01000512
python 3.x
>>> 01000File \"大众<stdin>\"大众, line 101000^SyntaxError: invalid token>>> 0o1000512
不等运算符
Python 2.x中不即是有两种写法 != 和 <>
Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有利用<>的习气
去掉了repr表达式``
Python 2.x 中反引号``相称于repr函数的浸染
Python 3.x 中去掉了``这种写法,只许可利用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我觉得用repr的机会很少,一样平常只在debug的时候才用,多数时候还是用str函数来用字符串描述工具。
def sendMail(from_: str, to: str, title: str, body: str) -> bool:pass
多个模块被改名(根据PEP8)
StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经增援新的io模组。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。 Python 2.6已经增援exec()函数。
5.数据类型
1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
>>> b = b'china'>>> type(b)<type 'bytes'>
str工具和bytes工具可以利用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。
>>> s = b.decode()>>> s'china'>>> b1 = s.encode()>>> b1b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。
Python IDE本文为大家推举几款款不错的 Python IDE(集成开拓环境),比较推举 PyCharm,当然你可以根据自己的喜好来选择适宜自己的 Python IDE。
PyCharm
PyCharm 是由 JetBrains 打造的一款 Python IDE。
PyCharm 具备一样平常 Python IDE 的功能,比如:调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本掌握等。
其余,PyCharm 还供应了一些很好的功能用于 Django 开拓,同时支持 Google App Engine,更酷的是,PyCharm 支持 IronPython。
PyCharm 官方下载地址:http://www.jetbrains.com/pycharm/download/
效果图查看:
Sublime Text
Sublime Text 具有俊秀的用户界面和强大的功能,例如代码缩略图,Python 的插件,代码段等。还可自定义键绑定,菜单和工具栏。
Sublime Text 的紧张功能包括:拼写检讨,书签,完全的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。
Sublime Text 是一个跨平台的编辑器,同时支持 Windows、Linux、Mac OS X等操作系统。
利用Sublime Text 2的插件扩展功能,你可以轻松的打造一款不错的 Python IDE,以下推举几款插件(你可以找到更多):
CodeIntel:自动补全+成员/方法提示(强烈推举)
SublimeREPL:用于运行和调试一些须要交互的程序(E.G. 利用了Input()的程序)
Bracket Highlighter:括号匹配及高亮
SublimeLinter:代码pep8格式检讨
Eclipse+Pydev
1、安装Eclipse
Eclipse可以在它的官方网站Eclipse.org找到并下载,常日我们可以选择适宜自己的Eclipse版本,比如Eclipse Classic。下载完成后解压到到你想安装的目录中即可。
当然在实行Eclipse之前,你必须确认安装了Java运行环境,即必须安装JRE或JDK,你可以到(http://www.java.com/en/download/manual.jsp)找到JRE下载并安装。
2、安装Pydev
运行Eclipse之后,选择help-->Install new Software,如下图所示。
点击Add,添加pydev的安装地址:http://pydev.org/updates/,如下图所示。
完成后点击\"大众ok\公众,接着点击PyDev的\"大众+\公众,展开PyDev的节点,要等一小段韶光,让它从网上获取PyDev的干系套件,当完成后会多出PyDev的干系套件在子节点里,勾选它们然后按next进行安装。如下图所示。
安装完成后,重启Eclipse即可
3、设置Pydev
安装完成后,还须要设置一下PyDev,选择Window -> Preferences来设置PyDev。设置Python的路径,从Pydev的Interpreter - Python页面选择New
会弹出一个窗口让你选择Python的安装位置,选择你安装Python的所在位置。
完成之后PyDev就设置完成,可以开始利用。
4、建立Python Project:
安装好Eclipse+PyDev往后,我们就可以开始利用它来开拓项目了。首先要创建一个项目,选择File -> New ->Pydev Project
会弹出一个新窗口,填写Project Name,以及项目保存地址,然后点击next完成项目的创建。
5、创建新的Pydev Module
光有项目是无法实行的,接着必须创建新的Pydev Moudle,选择File -> New -> Pydev Module
在弹出的窗口中选择文件存放位置以及Moudle Name,把稳Name不用加.py,它会自动帮助我们添加。然后点击Finish完成创建。
输入\公众hello world\"大众的代码。
6、实行程序
程序写完后,我们可以开始实行程序,在上方的工具栏上面找到实行的按钮。
之后会弹出一个让你选择实行办法的窗口,常日我们选择Python Run,开始实行程序。
更多 Python IDE
推举10 款最好的 Python IDE:http://www.runoob.com/w3cnote/best-python-ide-for-developers.html
当然还有非常多很棒的 Python IDE,你可以自由的选择,更多 Python IDE 请参阅:http://wiki.python.org/moin/PythonEditors
Python JSON本章节我们将为大家先容如何利用 Python 措辞来编码和解码 JSON 工具。
JSON(JavaScript Object Notation) 是一种轻量级的数据交流格式,易于人阅读和编写。
JSON 函数
利用 JSON 函数须要导入 json 库:import json。
json.dumps
json.dumps 用于将 Python 工具编码成 JSON 字符串。
语法
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding=\公众utf-8\公众, default=None, sort_keys=False, kw)
实例
以下实例将数组编码为 JSON 格式数据:
#!/usr/bin/pythonimport jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json = json.dumps(data)print json
以上代码实行结果为:
[{\"大众a\公众: 1, \"大众c\公众: 3, \"大众b\"大众: 2, \公众e\公众: 5, \公众d\"大众: 4}]
利用参数让 JSON 数据格式化输出:
>>> import json>>> print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': ')){ \"大众a\"大众: \"大众Runoob\"大众, \"大众b\公众: 7}
python 原始类型向 json 类型的转化对照表:
json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
语法
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, kw]]]]]]]])
实例
以下实例展示了Python 如何解码 JSON 工具:
#!/usr/bin/pythonimport jsonjsonData = '{\公众a\"大众:1,\公众b\公众:2,\"大众c\"大众:3,\公众d\"大众:4,\"大众e\公众:5}';text = json.loads(jsonData)print text
以上代码实行结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
json 类型转换到 python 的类型对照表:
更多内容参考:https://docs.python.org/2/library/json.html。
利用第三方库:Demjson
Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/
环境配置
在利用 Demjson 编码或解码 JSON 数据前,我们须要先安装 Demjson 模块。本教程我们会下载 Demjson 并安装:
$ tar -xvzf demjson-2.2.3.tar.gz$ cd demjson-2.2.3$ python setup.py install
更多安装先容查看:http://deron.meranda.us/python/demjson/install
JSON 函数
encode
Python encode() 函数用于将 Python 工具编码成 JSON 字符串。
语法
demjson.encode(self, obj, nest_level=0)
实例
以下实例将数组编码为 JSON 格式数据:
#!/usr/bin/pythonimport demjsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json = demjson.encode(data)print json
以上代码实行结果为:
[{\公众a\公众:1,\公众b\"大众:2,\"大众c\"大众:3,\"大众d\"大众:4,\"大众e\"大众:5}]
decode
Python 可以利用 demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。
语法
demjson.decode(self, txt)
实例
以下实例展示了Python 如何解码 JSON 工具:
#!/usr/bin/pythonimport demjsonjson = '{\公众a\"大众:1,\公众b\"大众:2,\"大众c\公众:3,\公众d\"大众:4,\"大众e\公众:5}';text = demjson.decode(json)print text
以上代码实行结果为:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}