你应该使用Python3里的这些新特性
概述
由于Python2的官方维护期即将结束,越来越多的Python项目从Python2切换到了Python3。可是,在实际的工作中,我发现好多人都是在用Python2的思维去写Python3的代码,Python3给我们提供了很多新的、很方便的特性,可以帮助我们快速的编写代码。
f-strings (3.6+)
在Python里面,我们经常使用format函数来格式化字符串,例如:
1 |
user = "Jane Doe" |
Python3里面提供了一个更加灵活方便的方法来格式化字符串,叫做f-strings。上面的代码可以这样实现:
1 |
user = "Jane Doe" |
Pathlib (3.4+)
f-strings这个功能太方便了,但是对于文件路劲这样的字符串,Python还提供了更加方便的处理方法。Pathlib是Python3提供的一个处理文件路劲的库。例如:
1 |
from pathlib import Path
root = Path('post_sub_folder')
|
Type hinting (3.5+)
静态与动态类型是软件工程中的一个热门话题,每个人都有不同的看法,Python作为一个动态类型语言,在Python3中也提供了Type hinting功能,例如:
1 |
def sentence_has_animal(sentence: str) -> bool: |
Enumerations (3.4+)
Python3提供的Enum类让你很容就能实现一个枚举类型:
1 |
from enum import Enum, auto class Monster(Enum): |
Python3的Enum还支持比较和迭代。
1 |
for monster in Monster: |
Built-in LRU cache (3.2+)
缓存是现在的软件领域经常使用的技术,Python3提供了一个lru_cache装饰器,来让你更好的使用缓存。下面有个实例:
1 |
import time def fib(number: int) -> int: |
现在我们可以使用lru_cache来优化我们上面的代码,降低代码执行时间。
1 |
from functools import lru_cache @lru_cache(maxsize=512) |
Extended iterable unpacking (3.0+)
废话不多说,直接上代码,文档在这
1 |
head, *body, tail = range(5) |
Data classes (3.7+)
Python3提供data class装饰器来让我们更好的处理数据对象,而不用去实现 init() 和 repr() 方法。假设如下的代码:
1 |
class Armor:
def __init__(self, armor: float, description: str, level: int = 1):
|
使用data class实现上面功能的代码,这么写:
1 |
from dataclasses import dataclass @dataclass |
Implicit namespace packages (3.3+)
通常情况下,Python通过把代码打成包(在目录中加入init.py实现)来复用,官方给的示例如下:
1 |
sound/ Top-level package |
在Python2里,如上的目录结构,每个目录都必须有init.py文件,一遍其他模块调用目录下的python代码,在Python3里,通过 Implicit Namespace Packages可是不使用__init__.py文件
1 |
sound/ Top-level package |
结语
这篇文章只列出了一下部分Python3的新功能,我希望这篇文章向您展示了部分您以前不知道的Python 3新功能,并且希望能帮助您编写更清晰,更直观的代码。
你应该使用Python3里的这些新特性的更多相关文章
- Python3.x 常用的新特性
Python3.x 常用的新特性 print() 是函数,不是一个语句 raw_input()输入函数,改为 input() Python 3 对文本和二进制数据做了更为清晰的区分. 文本由unico ...
- 关于python3.8的一些新特性的解析与代码演示
python3.8测试版出来了,我们来介绍一些变动,代码演示一下,当然底层相关的细节变动就不介绍了 只允许传位置参数 还记得如果我们想让某些参数只能以关键字参数的方式传递该怎么做吗? def foo1 ...
- Python3中的新特性(3)——代码迁移与2to3
1.将代码移植到Python2.6 建议任何要将代码移植到Python3的用户首先将代码移植到Python2.6.Python2.6不仅与Python2.5向后兼容,而且支持Python3中的部分新特 ...
- 初识 MySQL 5.6 新特性、功能
背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的 ...
- SQL Server 2014 BI新特性(一)五个关键点带你了解Excel下的Data Explorer
Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企业中的自助式的商业智能变得更加的灵活,从而也降低了商业智能的门槛. 此文是在微软商业智能官方博客里 ...
- SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer
SQL Server 2014新特性:五个关键点带你了解Excel下的Data Explorer Data Explorer是即将发布的SQL Server 2014里的一个新特性,借助这个特性讲使企 ...
- Oracle 11gR2 RAC 新特性说明
最近接触了一下Oracle 11g R2 的RAC,发现变化很大. 所以在自己动手做实验之前还是先研究下它的新特性比较好. 一. 官网介绍 先看一下Oracle 的官网文档里对RAC 新特性的一 ...
- 开源一周岁,MindSpore新特性巨量来袭
摘要:MindSpore很多新特性与大家见面了,无论是在效率提升.易用性,还是创新方面,都是干货满满. 最近,AI计算框架是业界的热点,各大厂商纷纷投身AI框架的自研发,究其原因:AI框架在整个人工智 ...
- 相比于python2.6,python3.0的新特性。
这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...
随机推荐
- 获取src 内容
获取(代码): ].src; // 测试无效 修改(代码): 1 $("#img").attr('src',path);
- linux 运维指令
[root@yan- ~] # uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令 [root@yan- ~] # head -n /etc/issue # 查看操作系统版本 ...
- iOS-代理设计模式delegate和protocol
充当代理的步骤: 首先要明确谁请别人代理,谁当别人的代理 1> 请代理三部曲: 1 写一个协议protoc,把自己不方便做的事列出来(@protocol studentDelegate < ...
- Blender模型导入进Unity,旋转缩放的调整
Blender跟Unity的XYZ轴不同的原因,导致Blender模型导入Unity之后会发生模型朝向不对. 请先看看下边这个情况: 首先,Blender物体模式下,对模型进行 旋转 缩放,将会在右边 ...
- markdown语法(测试自用)
Markdown语法主要分为几大部分:标题.段落.区块引用.代码区块.强调.列表.分割线.链接.图片.反斜杠.符号'`' 1.标题 两种形式 1)使用 = 和 - 标记一级标题和二级标题 一级标题 二 ...
- 从零开始学游戏开发(一):下载与安装UE4游戏引擎
如何下载和安装虚幻引擎 下载Epic Games Launcher 步骤 百度搜索"what is ue4" 点击第一个搜索结果,进入ue4官网 进入官网首页,点击右上角下载 创建 ...
- Beginning Linux Programming 学习-chapter2-Shell programming-Pipes and Redirection
"为了从事创造性工作,人类需要孤独,可是在孤独中,广义的人类仍存在于内心."--(德国)奥铿 ...
- Git强制推送代码到多个远程仓库
git push -f origin master 注释: origin 远程仓库名, master 分支名,-f 为force,意为:强行.强制.
- 数据结构 -- 二叉树(Binary Search Tree)
一.简介 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. ...
- MarkdownPad 2 用 LaTeX 编写公式(17)
方法一:(可离线显示) 1.解压「jaxedit-master.zip」,解压后找到「jaxedit-master」文件夹下「MathJax.js」文件的路径,这个文件在该文件下的路径是「jaxedi ...