Python2转Python3
Python3 学习
背景
为什么学Python3?
我本身会python2,但python3毕竟比python3高级,而我又觉得python这门语言,写起来真的很舒服,索性提升一下自己,学习python3,以后也只用python3来做python的开发
发展历史
Python3 2008年12月发布,python2 2000年10月发布
焦点
这里只写与python2中不同的部分
语法变化
print语法
- Print方法需要括号
print ‘xxxx'
-> print(‘xxxx’)
.
Unicode编码
- python3 源码文件,默认使用 utf-8, 不需要主动在文件头加标注了
# python2
>>> 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"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'
# python3
>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'
除法运算
- python3 中
/
是小数除法,即如果是两个整数/
也会出现 浮点数 - python3 中
//
是地板除法 - python3 中如果舍弃小数点部分,需要用
math.trunc
异常处理
- python3 的catch异常的语法是 except SomeException as e
- python3 直邮继承BaseException的对象,才可以被抛出
迭代器range
- python3 中,没有xrange(), 只有range, 而range实现了 xrange
八进制字面量表示
- 八进制数必须写成0o777,原来的形式0777不能用了。
- 新增了一个bin()函数用于将一个整数转换成二进制字串。
不等运算符
- python3 只有!=, 没有 <>
repr表达式
- python3 去掉了
/
/`` 这种语法,只能使用repr()
函数
模块换名
_winreg
->winreg
ConfigParser
->configparser
copy_reg
->copyreg
Queue
->queue
SocketServer
->socketserver
rear
->reprlib
- StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除
- httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
- 取消了exec语句,只剩下exec()函数。
数据类型
- 去除了long 类型,只有int,但表现就是long
- 新增bytes,
- dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。
全局变量
- python3 新增 nonlocal 关键字
# python2
def func():
c = 1
def foo():
c = 2
foo()
print(c)
func() # 1
# python3
def func():
c = 1
def foo():
nonlocal c
c = 2
foo()
print(c)
func() # 2
只有新式类
- 不需要 class F(object): pass 了,可以直接用 class F(): pass
项目路径
- python3 使用 绝对路径导入
"""
文件路径如下:
test/
- main.py
- lib/
- __init__.py
- some_func.py
- other_func.py
"""
# python 3, 在 some_func.py 中引入 other_func.py
from lib import other_func