Py学习  »  Python

看这里,Python 3.0重要新特性大全

老叶茶馆 • 6 年前 • 250 次点击  


导读
作者:张老师
知数堂《Python运维开发》课程讲师
资深Python开发专家,7年多Python开发经验
原乐视云平台RDS服务开发负责人
现负责某垂直电商容器云建设工作
文末有彩蛋福利,切勿错过


背景:
上周四(8月22号)张老师给大家分享了公开课《Python3最佳学习指南》,通过分享我们已全面了解Python2和Python3的异同。本文张老师总结补充了Python3的六个新特性,并给大家一些学习Python3的好建议。


特性一 、强制关键词规避风险


假如我封装一个函数如下:
#coding:utf-8

def do_sum(a, b, switch=False, *args):
if switch:
print("已删库,跑路吧")
return a+b

print(do_sum(1, 2))


只有在开关switch参数打开时才能删库(假定一个危险操作)。但是当我们调用函数时,写成了do_sum(1, 2, 3),执行结果:
幸好,在python3中引入了新的特性强制关键词参数,上述可以这样写:
def do_sum(a, b, *args, switch=False):
if switch:
print("已删库,跑路吧")
return a+b
只有在特定指定 do_sum(1, 2, switch=True)时才会触发删库操作,执行3 do_sum(1, 2, 3)不会触发危险逻辑。
另外,如果你不想收集其他参数,你可以用 * 代替 *args,比如这样:
def do_sum(a, b, *, switch=True):
pass


总结:利用这个特性可以将危险逻辑规避起来,避免了调用失误造成事故发生。




特性二、序列自由解包更方便

假如我想得到列表的第一项,第二项,和剩下的全部。假定列表是:range(8)
以前可能要这样:
现在一行代码搞定:
a, b, *rest = range(8)
输出如下:
rest 可以在任何位置,比如这样:
假如我想得到文件第一行和最后一行内容,这样即可:
with open('file_name') as f:
first, *_, last = f.readlines()
另外:不仅列表是这样,元组和字典等序列都有这样的特性哦。


总结:通过高级解包新特性,可以灵活地从序列中得到我们想要的项。




特性三、一切皆迭代器省内存

这个特性将python2中可能内存泄露或者内存溢出的问题都给解决掉了。举个例子:
python2:
def do_sum(n):
a = 0
for i in range(n + 1):
a += i
return a

do_sum(100000000) # 内存爆炸


因为range()会先将生成的列表放入内存中,显然这么大的列表,内存君表示受不了。
当然,在python2 中可以用xrange来解决这个问题。但是现在python3中,这些内建函数range,map,filter,zip,dict.values 等返回的都是迭代器,遍历是每次通过next去取下一个值,妈妈再也不用担心内存占用高的问题了。


总结:在python3中,通过迭代器将可能造成内存问题解决,大家可以放心使用了这些内建函数了。




特性四、 字符串格式化新方式

以往,我们在格式化字符串时,是这样的:
貌似还不够简洁,python3.6中提供了新特性:f-strings
现在,可以这样了:


总结:没什么好总结的,两个字,就是简洁。




特性五、dataclass 装饰器更灵活

举例:创建一个类,注意初始化方法,主要是实现以该对象属性存储数字
为了初始化一个对象, 传一个参数,val都会重复出现三次。
下面使用@dataclass装饰器实现以上同样的功能:
(备注:dataclass要安装一下,pip install dataclasses)

这里新增的装饰器很像java中注解的功能。另外,dataclasses还有更好的特性,留给大家去钻研。

总结:dataclasses 装饰器能够简化类初始化代码。




特性六、pathlib 处理路径更强大

它完全采用面向对象的编程方式,尤其是在处理配置路径方面简直太方便了。
它可以这样:
也可以这样:
当你想读文件是,甚至不用open文件:
更cool的是:


总结:pathlib 对应路径的处理更加灵活简洁,也更面向对象方式。




写在最后,Python3从08年12月发布至今,每个版本都有新的特性供大家去学习。官网上发布python3.7新特性如下:
https://docs.python.org/zh-cn/3/whatsnew/3.7.html 


想了解更多的内容可以看下8月22号的公开课《Python3最佳学习指南》。
Python能做到的事情还有很多,很多。若想更系统的学习Python,大家可以了解下知数堂《Python运维班》第8期课程,本周六即将开课。

本期课程亮点:
  • 项目:mha自动化管理 

  • 【kubernetes入门与提高】由原来的一周新增为两周

  • 本期的项目为MySQL管理平台 


有兴趣的同学扫描下方二维码添加助教获取最新课程大纲。


彩蛋福利

公开课视频链接:

https://ke.qq.com/course/438477

点击文阅读原文”直达腾讯课堂

扫码加助教可获取课程资料(演示脚本及课件)

(资料内容包含)






扫码加入QQ技术交流群

   (群号:801428435)    



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39251