Python3的这些新特性很方便

本文来自异步社区,作者xiaochao,名称: Python3的这些新特性很方便

概述

  随着Python在机器学习和数据科学领域的应用越来越广泛,相关的Python库也增长的非常快。但是Python本身存在一个非常要命的问题,就是Python2和Python3,两个版本互不兼容,而且Github上Python2的开源库有很多不兼容Python3,导致大量的Python2的用户不愿意迁移到Python3。   Python3在很多方面都做出了改变,优化了Python2的很多不足,标准库也扩充了很多内容,例如协程相关的库。现在列举一些Python3里提供的功能,跟你更好的从Python2迁移到Python3的理由。 系统文件路径处理库:pathlib   使用Python2的同学,应该都用过os.path这个库,来处理各种各样的路径问题,比如拼接文件路径的函数:os.path.join(),用Python3,你可以使用pathlib很方便的完成这个功能:   ![这里写图片描述](https://img-blog.csdn.net/20180208175740458?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZXB1Yml0MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)   相比与os.path.join()函数,pathlib更加安全、方便、可读。pathlib还有很多其他的功能。   ![这里写图片描述](https://img-blog.csdn.net/20180208175938578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZXB1Yml0MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)   类型提醒: Type hinting 在Pycharm中,类型提醒是这个样子的:

  类型提醒在复杂的项目中可以很好的帮助我们规避一些手误或者类型错误,Python2的时候是靠IDE来识别,格式IDE识别方法不一致,并且只是识别,并不具备严格限定。例如有下面的代码,参数可以是numpy.array , astropy.Table and astropy.Column, bcolz, cupy, mxnet.ndarray等等。

这里写图片描述
同样上面的代码,传入pandas.Series类型的参数也是可以,但是运行时会出错。
这里写图片描述
这还只是一个函数,对于大型的项目,会有好多这样的函数,代码很容易就跑飞了。所以确定的参数类型对于大型项目来说非常重要,而Python2没有这样的能力,Python3可以。

这里写图片描述
目前,比如JetBrains家的PyCharm已经支持Type Hint语法检查功能,如果你使用了这个IDE,可以通过IDE功能进行实现。如果你像我一样,使用了SublimeText编辑器,那么第三方工具mypy可以帮助到你。   PS:目前类型提醒对ndarrays/tensors支持不是很好。

运行时类型检查:
正常情况下,函数的注释处理理解代码用,其他没什么用。你可以是用enforce来强制运行时检查类型。
这里写图片描述
使用@特殊字符表示矩阵乘法

如下代码:

这里写图片描述
使用@符号,整个代码变得更可读和方便移植到其他如numpy、tensorflow等库。

**特殊字符来递归文件路径
在Python2中,递归查找文件不是件容易的事情,即使使用glob库,但是python3中,可以通过通配符简单的实现。
这里写图片描述
和之前提到的pathlib一起使用,效果更好:
这里写图片描述
Print函数
打印到指定文件
这里写图片描述
不使用join函数拼接字符串

这里写图片描述
重写print函数
这里写图片描述
再比如下面的代码
这里写图片描述
虽然上面这段代码也能达到重写print函数的目的,但是不推荐使用。

字符串格式化
python2提供的字符串格式化系统还是不够好,太冗长麻烦,通常我们会写这样一段代码来输出日志信息:
这里写图片描述
输出的结果是:
这里写图片描述
python3.6的f-strings功能实现起来就简单多了。
这里写图片描述
而且,在编写查询或生成代码片段时非常方便:
这里写图片描述
严格排序

下面这些比较操作在python3里是非法的
这里写图片描述
不同类型的数据无法排序
这里写图片描述
NLP Unicode问题
这里写图片描述
下面这段代码在Python2里运行失败但是Python3会成功运行,Python3的字符串都是Unicode编码,所以这样对NLP来说很方便,再比如:
这里写图片描述
字典

CPython3.6+里的dict默认的行为和orderdict很类似
这里写图片描述
同样的,**kwargs字典内容的数据和传入参数的顺序是一致的。
这里写图片描述
Iterable unpacking
这里写图片描述
更高性能的默认pickle engine
这里写图片描述
缩短到Python2时间的1/3

更安全的列表推导
这里写图片描述
更简易的super()
这里写图片描述
Multiple unpacking
合并两个Dict
这里写图片描述
Python3.5+不仅仅合并dict很方便,合并list等也很方便
这里写图片描述
整数类型

python2提供了两个整数类型:int和long,python3只提供有个整数类型:int,如下的代码:
这里写图片描述
总结
python3提供了很多新的特性,方便我们编码的同时,也带来了更好的安全性和较高的性能。而且官方也一直推荐尽快迁移到python3。当然,迁移的代价因系统而异,希望这篇文章能对你迁移python2到python3有些帮助。

本文来自异步社区,作者xiaochao,名称: Python3的这些新特性很方便

延伸推荐
这里写图片描述
点击关键词阅读更多新书:

Python|机器学习|Kotlin|Java|移动开发|机器人|有奖活动|Web前端|书单
这里写图片描述
在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦!

扫一扫上方二维码,回复“关注”参与活动!
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值