程序员今日看点Python 运维

python3新特性(三) 一些小改动合集

2016-12-20  本文已影响588人  Stansosleepy

Python新特性合集续

承接上一篇,本片文章将继续介绍一批python3的新特性,由于每个特性的改动比较小,所以放到一个合集里面

1、Python3的文件open

由于Python3里面彻底把字符串和字节流分开(这是好事),在Python3中打开文件的模式就有了区别,‘r’和‘rb’两种模式将得到不同的东西,看下面的例子:

>>> f=open('sample.txt','r')
>>> g=open('sample.txt','rb')
>>> f
<_io.TextIOWrapper name='sample.txt' mode='r' encoding='UTF-8'>
>>> g
<_io.BufferedReader name='sample.txt'>
>>> fline=f.read()
>>> fline
#中文显示出来了
'fisrt line\n中文\n\ngqwegdf\n\n\ngq\n\nasdf\nasf\n\ngwq\n\n\n\n\n\n\nlastline\n'
>>> type(fline)
<class 'str'>
>>> gline=g.read()
>>> gline
#中文显示为编码的值
b'fisrt line\n\xe4\xb8\xad\xe6\x96\x87\n\ngqwegdf\n\n\ngq\n\nasdf\nasf\n\ngwq\n\n\n\n\n\n\nlastline\n'
>>> type(gline)
<class 'bytes'>

从上面的例子可以看出,Python3中用‘r’模式打开的文件读到的是字符串的结果,‘rb’模式读到的是字节流的结果,下面再看看Python2中混用字符串和字节流的结果:

>>> f=open('sample.txt','r')
>>> g=open('sample.txt','rb')
>>> f
<open file 'sample.txt', mode 'r' at 0x7f4a3d0884b0>
>>> g
<open file 'sample.txt', mode 'rb' at 0x7f4a3d088540>
>>> fline=f.read()
>>> gline=g.read()
>>> fline
#中文都显示为编码原值
'fisrt line\n\xe4\xb8\xad\xe6\x96\x87\n\ngqwegdf\n\n\ngq\n\nasdf\nasf\n\ngwq\n\n\n\n\n\n\nlastline\n'
>>> gline
'fisrt line\n\xe4\xb8\xad\xe6\x96\x87\n\ngqwegdf\n\n\ngq\n\nasdf\nasf\n\ngwq\n\n\n\n\n\n\nlastline\n'
>>> fline==gline
True

可以看出在Python2中,两种方式读到的内容实际上是一样的(这也是当年让我困惑的地方)。

2、Python3源文件编码改为UTF-8

为此欢呼吧,你再也不用写那些恶心的#!encoding=utf-8的什么鬼了,大大方方的用中文写注释吧!

当然你要用中文编程,也不是不可以啊。

3、Python3的yield from语法

PEP-380(Syntax for Delegating to a Subgenerator)带来了一种新的语法:yield from

关于yield和yield from比较复杂,涉及到协程什么的,我将在另一篇文章里面总结一下,这里就偷懒了。

4、其他的小改动

比较杂

上一篇下一篇

猜你喜欢

热点阅读