社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

老叶茶馆 • 4 年前 • 198 次点击  


导读
作者:张老师
知数堂《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
 
198 次点击