Python2即将淘汰,分享python3 才能用的特性(13个)
Posted rrh4869
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python2即将淘汰,分享python3 才能用的特性(13个)相关的知识,希望对你有一定的参考价值。
特性 1: 高级解包
使用解包交换变量非常方便,在 python3 中,这个特性得到了加强,现在你可以这样做:
rest 可以在任何位置,比如这样:
使用 python 获得文件的第一行和最后一行内容。
特性 2: 强制关键词参数
如果你用以上写法来写一个函数,那么你限定了调用参数时,必须要这样写 f(a, b, option=True)
。
如果你不想收集其他参数,你可以用 *
代替 *args
,比如这样:
当你碰上这种事情:哎呀,我不小心传递太多参数给函数,其中之一会被关键字参数接收,然后程序原地爆炸了。
所以,以后千万别这样写,为了你的下半生能够过上平静的日子,你应该这样:
试一下不合法的调用:
有时你会想写这样一个方法
我们应该用max(iterable, *, key=None)
来写这个函数。你在写代码时,也可以用关键词参数使你的 api 具有更好的扩展性。
我们可以用 extendto(10, shorter=a, longer=b)
的方式调用这个方法,以后我们要修改这个接口的传参方式时,也不用修改已有代码啦。
特性 3:链式异常
现在你在写一个函数,由于可能会出现错误,你打算 catch 可能出现的异常,做一些额外的工作,然后再抛出另一种异常。
python3 中会依次把异常记录下来
特性 4: 更好用的 OSError 子类
刚刚给你的代码其实不正确,OSError 实际上包含了很多类异常,比如权限不够,文件没找到,不是一个目录等,而我们默认是权限不够。
python3 添加了大量的新 Exception 类型,所以你可以这样做:
特性 5: 一切皆迭代器
在 python3 中,range,zip,dict.values 以及其它,都是返回迭代器,所以这对内存很友好。
如果你希望得到一个列表,要做的仅仅是在外层加一个 list
,显示的声明永远比隐式地更好,你很难再写出一个吃内存的代码了。
特性 6: 不是一切都能比较
在 python3 中,这个非常 buggy 的特性被取消啦:
特性 7: yield from
如果你用 generator 的话,这个是一个非常好的特性。在以前,你是这么写代码的:
现在是这样
没有看懂?来一个例子,比如这样,我们希望得到 [0, 0, 1, 1, 2, 2, ...]
的列表用于迭代,我们有以下写法:
我们知道,迭代器的方式非常好,首先在内存上它很有优势,并且可以按需计算,每次只计算要用的值。如果你需要一个列表的时候,只需要在外层加一个 list
,如果你需要切片 slicing
,可以用 itertools.islice()
特性 8: asyncio
现在你可以用更方便的协程调用了
特性 9: 新的标准库
ipaddress 库
functools.lrc_cache 装饰器
enum 类
特性 10: Fun
听说你会中文编程?
类型标注
特性 11: Unicode 编码
这是新手遇到的最多的问题,为什么我的命令行输出是乱码?
python2 中的 str 是字节数组
python3 中的 str 是 unicode 字符串,只有 unicode 才能表示中文。
特性 12: 矩阵相乘
python3 中 @ 可以被重载了,所以用 numpy 中的矩阵乘法时可以这么来(我在 tensorflow 中也经常这样写)
特性 13: pathlib
这是一个特别好用的面向对象路径处理库,更好的写法
以上是关于Python2即将淘汰,分享python3 才能用的特性(13个)的主要内容,如果未能解决你的问题,请参考以下文章
centos7下安装Python3.7(与python2共存)
Python - Python2与Python3的对比转换与兼容