使用解包交换变量很是方便,在 python3 中,这个特性获得了增强,如今你能够这样作:python
rest 能够在任何位置,好比这样:编程
使用 python 得到文件的第一行和最后一行内容。api
特性 2: 强制关键词参数数组
若是你用以上写法来写一个函数,那么你限定了调用参数时,必需要这样写 f(a, b, option=True)
。app
若是你不想收集其余参数,你能够用 *
代替 *args
,好比这样:async
当你碰上这种事情:哎呀,我不当心传递太多参数给函数,其中之一会被关键字参数接收,而后程序原地爆炸了。函数
因此,之后千万别这样写,为了你的下半生可以过上平静的日子,你应该这样:fetch
试一下不合法的调用:this
有时你会想写这样一个方法编码
咱们应该用max(iterable, *, key=None)
来写这个函数。你在写代码时,也能够用关键词参数使你的 api 具备更好的扩展性。
咱们能够用 extendto(10, shorter=a, longer=b)
的方式调用这个方法,之后咱们要修改这个接口的传参方式时,也不用修改已有代码啦。
如今你在写一个函数,因为可能会出现错误,你打算 catch 可能出现的异常,作一些额外的工做,而后再抛出另外一种异常。
python3 中会依次把异常记录下来
刚刚给你的代码其实不正确,OSError 实际上包含了不少类异常,好比权限不够,文件没找到,不是一个目录等,而咱们默认是权限不够。
python3 添加了大量的新 Exception 类型,因此你能够这样作:
在 python3 中,range,zip,dict.values 以及其它,都是返回迭代器,因此这对内存很友好。
若是你但愿获得一个列表,要作的仅仅是在外层加一个 list
,显示的声明永远比隐式地更好,你很难再写出一个吃内存的代码了。
在 python3 中,这个很是 buggy 的特性被取消啦:
若是你用 generator 的话,这个是一个很是好的特性。在之前,你是这么写代码的:
如今是这样
没有看懂?来一个例子,好比这样,咱们但愿获得 [0, 0, 1, 1, 2, 2, ...]
的列表用于迭代,咱们有如下写法:
咱们知道,迭代器的方式很是好,首先在内存上它颇有优点,而且能够按需计算,每次只计算要用的值。若是你须要一个列表的时候,只须要在外层加一个 list
,若是你须要切片 slicing
,能够用 itertools.islice()
如今你能够用更方便的协程调用了
ipaddress 库
functools.lrc_cache 装饰器
enum 类
据说你会中文编程?
类型标注
这是新手遇到的最多的问题,为何个人命令行输出是乱码?
python2 中的 str 是字节数组
python3 中的 str 是 unicode 字符串,只有 unicode 才能表示中文。
python3 中 @ 能够被重载了,因此用 numpy 中的矩阵乘法时能够这么来(我在 tensorflow 中也常常这样写)
这是一个特别好用的面向对象路径处理库,更好的写法