简单了解Python3里的一些新特性


Posted in Python onJuly 13, 2019

概述

到2020年,Python2的官方维护期就要结束了,越来越多的Python项目从Python2切换到了Python3。其实在实际工作中,很多伙伴都还是在用Python2的思维写Python3的代码。给大家总结一下Python3一些新的更方便的特性!希望你们看完后也能高效率的编写代码

f-strings (3.6+)

在Python里面,我们经常使用format函数来格式化字符串,例如:

user = "Jane Doe"action = "buy"log_message = 'User {} has logged in and did an action {}.'.format(
 user,
 action)print(log_message)输出:User Jane Doe has logged in and did an action buy.

Python3里面提供了一个更加灵活方便的方法来格式化字符串,叫做f-strings。上面的代码可以这样实现:

user = "Jane Doe"action = "buy"log_message = f'User {user} has logged in and did an action {action}.'print(log_message)输出: User Jane Doe has logged in and did an action buy.

Pathlib (3.4+)

f-strings这个功能太方便了,但是对于文件路劲这样的字符串,Python还提供了更加方便的处理方法。Pathlib是Python3提供的一个处理文件路劲的库。例如:

from pathlib import Pathroot = Path('post_sub_folder')print(root)输出结果: post_sub_folder
path = root / 'happy_user'# 输出绝对路劲print(path.resolve())输出结果:/root/post_sub_folder/happy_user

Type hinting (3.5+)

静态与动态类型是软件工程中的一个热门话题,每个人都有不同的看法,Python作为一个动态类型语言,在Python3中也提供了Type hinting功能,例如:

def sentence_has_animal(sentence: str) -> bool:
 return "animal" in sentence
sentence_has_animal("Donald had a farm without animals")# True

Enumerations (3.4+)

Python3提供的Enum类让你很容就能实现一个枚举类型:

from enum import Enum, autoclass Monster(Enum):
  ZOMBIE = auto()
  WARRIOR = auto()
  BEAR = auto()print(Monster.ZOMBIE)输出: Monster.ZOMBIE

Python3的Enum还支持比较和迭代。

for monster in Monster:
  print(monster)输出: Monster.ZOMBIE   Monster.WARRIOR   Monster.BEAR

Built-in LRU cache (3.2+)

缓存是现在的软件领域经常使用的技术,Python3提供了一个lru_cache装饰器,来让你更好的使用缓存。下面有个实例:

import timedef fib(number: int) -> int:
  if number == 0: return 0
  if number == 1: return 1
  return fib(number-1) + fib(number-2)start = time.time()fib(40)print(f'Duration: {time.time() - start}s')# Duration: 30.684099674224854s

现在我们可以使用lru_cache来优化我们上面的代码,降低代码执行时间。

from functools import lru_cache@lru_cache(maxsize=512)def fib_memoization(number: int) -> int:
  if number == 0: return 0
  if number == 1: return 1
  return fib_memoization(number-1) + fib_memoization(number-2)start = time.time()fib_memoization(40)print(f'Duration: {time.time() - start}s')# Duration: 6.866455078125e-05s

Extended iterable unpacking (3.0+)

代码如下:

head, *body, tail = range(5)print(head, body, tail)输出: 0 [1, 2, 3] 4py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()print(py)print(filename)print(cmds)输出:python3.7
   script.py   ['-n', '5', '-l', '15']first, _, third, *_ = range(10)print(first, third)输出: 0 2

Data classes (3.7+)

Python3提供data class装饰器来让我们更好的处理数据对象,而不用去实现 init () 和 repr() 方法。假设如下的代码:

class Armor:
  def __init__(self, armor: float, description: str, level: int = 1):
    self.armor = armor    self.level = level    self.description = description  def power(self) -> float:
    return self.armor * self.level
armor = Armor(5.2, "Common armor.", 2)armor.power()# 10.4print(armor)# <__main__.Armor object at 0x7fc4800e2cf8>

使用data class实现上面功能的代码,这么写:

from dataclasses import dataclass@dataclassclass Armor:
  armor: float
  description: str
  level: int = 1
  def power(self) -> float:
    return self.armor * self.level
armor = Armor(5.2, "Common armor.", 2)armor.power()# 10.4print(armor)# Armor(armor=5.2, description='Common armor.', level=2)

Implicit namespace packages (3.3+)

通常情况下,Python通过把代码打成包(在目录中加入 init .py实现)来复用,官方给的示例如下:

sound/             Top-level package
   __init__.py        Initialize the sound package
   formats/         Subpackage for file format conversions
       __init__.py
       wavread.py
       wavwrite.py
       aiffread.py
       aiffwrite.py
       auread.py
       auwrite.py       ...
   effects/         Subpackage for sound effects
       __init__.py
       echo.py
       surround.py
       reverse.py       ...
   filters/         Subpackage for filters
       __init__.py
       equalizer.py
       vocoder.py
       karaoke.py

在Python2里,如上的目录结构,每个目录都必须有 init .py文件,一遍其他模块调用目录下的python代码,在Python3里,通过 Implicit Namespace Packages可是不使用__init__.py文件

sound/             Top-level package
   __init__.py        Initialize the sound package
   formats/         Subpackage for file format conversions
       wavread.py
       wavwrite.py
       aiffread.py
       aiffwrite.py
       auread.py
       auwrite.py       ...
   effects/         Subpackage for sound effects
       echo.py
       surround.py
       reverse.py       ...
   filters/         Subpackage for filters
       equalizer.py
       vocoder.py
       karaoke.py

结语

这里由于时间关系(确实挺忙)只列出了部分Python3的新功能,希望你在看了这篇文章以后,学以致用,写出更清晰更直观的代码!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中http请求方法库汇总
Jan 06 Python
Python手机号码归属地查询代码
May 04 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python中Numpy mat的使用详解
May 24 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
Python面向对象之Web静态服务器
Sep 03 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
Python实现Hash算法
Mar 18 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 #Python
Django对数据库进行添加与更新的例子
Jul 12 #Python
Python 绘制酷炫的三维图步骤详解
Jul 12 #Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 #Python
python实现简单聊天室功能 可以私聊
Jul 12 #Python
pyinstaller参数介绍以及总结详解
Jul 12 #Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 #Python
You might like
php 冒泡排序 交换排序法
2011/05/10 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
javascript动态加载二
2012/08/22 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
用Python制作音乐海报
2021/01/26 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
毕业生造价工程师求职信
2013/10/17 职场文书
主持词开场白
2014/03/17 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
五四演讲稿范文
2014/09/03 职场文书
手机销售员岗位职责
2015/04/11 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
使用springMVC所需要的pom配置
2021/09/15 Java/Android