python3.4新特性_python3新特性(二) 一些小改动合集

Python新特性合集

本片文章将集中介绍5个python3的新特性,由于每个特性的改动比较小,所以放到一个合集里面

1、Python3的除法

对比一下Python2和Python3的除法

python3:

>>> 100/5

20.0

>>> 100.0/5

20.0

>>> 100//5

20

>>> 100/7

14.285714285714286

>>> 100//7

14

可以看出Python3的除法遵从以下规则

无论整除与否都返回浮点数

floor除法(//)返回向下取证的整数结果

Python3的这种除法规则保证了除法的结果一定是数值准确的,不会出现100/7=14这种情况

再看看python2的除法:

>>> 100/5

20

>>> 100.0/5

20.0

>>> 100/7

14

>>> 100.0/7

14.285714285714286

>>> 100//7

14

>>> 100.0//7

14.0

>>> 100.0//5

20.0

可以看出python2里面的除法的语法更像是C语言那种风格,int相除得到int,有浮点数参与的除法得到浮点数。 floor 除法也遵从上述原则。

2、Python3的矩阵乘法符号

在python3.5之后使用例如numpy进行科学运算的时候,可以使用“@”直接进行举证的乘法运算了。

>>> import numpy as np

>>> a=np.array([[1,2,3],[123,5,61],[9,6,-3]])

>>> a@a

array([[ 274, 30, 116],

[1287, 637, 491],

[ 720, 30, 402]])

>>> a@a@a@a@a@a@a@a

array([[ 134837945986, 25136379570, 62890687970],

[1347945735285, 292595126821, 616252333325],

[ 320633136090, 54125094810, 151255191066]])

#python2中的矩阵乘法如下

>>> np.dot(a,a)

array([[ 274, 30, 116],

[1287, 637, 491],

[ 720, 30, 402]])

3、Python3的高级解包特性

在python3中现在可以用这样的语法:

>>> a,b,*rest,c,d = range(1,8)

>>> rest

[3, 4, 5]

>>> a

1

>>> b

2

>>> c

6

>>> d

7

这个特性可以用来直接获取文本的第一行和最后一行:

>>> f=open("sample.txt","r")

>>> fl,*rest,ll = f.readlines()

>>> fl

'fisrt line\n'

>>> ll

'lastline\n'

4、Python3函数的关键词唯一参数

在python2中如果不小心给一个函数传递多余的参数,可能会被后面的关键字接收:

>>> def fun(a,b,key1=None,key2=None):

... if key1 or key2:

... print key1,key2

... else:

... print a,b

...

>>> fun(1,2)

1 2

#3就不小心被key1接收了,导致非预期的行为

>>> fun(1,2,3)

3 None

>>>

在Python3中可以使用“*”隔离函数的两种参数:

>>> def fun(value1,value2,*, key1=None,key2=None):

... if key1 or key2:

... print (key1,key2)

... else:

... print (value1,value2)

...

#错误传递的参数会导致报错

>>> fun(1,2,3)

Traceback (most recent call last):

File "", line 1, in

TypeError: fun() takes 2 positional arguments but 3 were given

>>> fun(1,2)

1 2

或者使用*args灵活接收传递的多余参数:

>>> def fun(value1,value2,*args, key1=None,key2=None):

... if key1 or key2:

... print (key1,key2)

... else:

... print (value1,value2,args)

...

>>>

>>>

>>> fun(1,2)

1 2 ()

#*args接收多余的参数

>>> fun(1,2,3,4,5)

1 2 (3, 4, 5)

>>> fun(1,2,3,4,5,key1=6,key2=7)

6 7

5、Python3中range,itertools.izip,dict.itervalues等都变为迭代器

在Python2中,我们知道range(100)回返回一个列表,xrange(100)则返回一个迭代器。由于列表也是可以迭代的,所以以下两者几乎是等价的,除了速度和内存上使用的差异,可以理解为range(10)是提前算出列表再进行迭代,而xrange是每一个循环进行一次计算,生成下一个值。

for i in range(10) == for i in xrange(10)

在Python3中:

range被python2中的xrange替代

xrange取消

看下面的例子:

#Python2

>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> xrange(10)

xrange(10)

>>> type(xrange(10))

#python3

>>> range(10)

range(0, 10)

#range不再返回一个列表

>>> type(range(10))

#想要得到列表需要用list转换一下

>>> list(range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

同样,range, zip, map, dict.values这些也都变成了迭代器,而不是返回一个“可迭代的列表”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值