python没有用_你可能没有在Python3中使用但却应该使用的东西

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

由于Python EOL的发布,许多人开始将他们的Python版本从2切换到3。不幸的是,我发现大多数Python3看起来仍然像Python2,但是要加括号(尽管在我之前的文章《使用Python进行web抓取介绍》中的代码示例也是这样)。下面,我将展示一些令人兴奋的特性示例,你只能在Python3中使用它们,希望它可以让你使用Python解决问题变得更容易。

所有示例都是在Python 3.7中编写的,每个特性都包含该特性所需的最低Python版本。

f-strings (3.6+)

在任何编程语言中,没有字符串是很难做任何事情的,为了保持理智,你希望有一种结构化的方法来处理字符串。大多数使用Python的人更喜欢使用format方法。

23dcf42cd9d6452d8afb1adac780bfe0.jpg

除了format,Python 3还提供了一种通过f-strings进行字符串插值的灵活方法。和上面一样使用f-strings的代码是这样的:

5f5b357261404c04a03b26d498fda796.jpg

Pathlib (3.4+)

f-strings非常棒,但是有些字符串(比如文件路径)有自己的库,这使得它们的操作更加容易。Python 3提供了pathlib作为一个处理文件路径的方便抽象。如果你不确定为什么你应该使用pathlib,试着阅读这篇优秀的文章——《为什么你应该使用pathlib》——Trey Hunner。

e4bba10b51944d7195aa7fe07ea1b716.jpg

类型提示 (3.5+)

静态和动态类型是软件工程中一个热门的话题,几乎每个人都对此有自己的看法。我将让读者决定何时应该编写类型,但我认为你至少应该知道Python 3支持类型提示。

995ddb07077c4607bf28799ca734d525.jpg

枚举 (3.4+)

Python 3提供了一种通过Enum类来编写枚举的简单方法。枚举是封装常量列表的一种方便的方法,因此它们不会在没有太多结构的情况下随机分布在你的代码中。

6921028a9c034f89876a87a135e0e46b.jpg

枚举是一组符号名称(成员),它们绑定到惟一的常量值。在枚举中,可以通过标识对成员进行比较,并且枚举本身也可以被遍 历。

ee7a7b5f18a24cfa98808938d99f53d7.jpg

内置的 LRU 缓存 (3.2+)

缓存存在于我们今天使用的几乎所有水平的软件和硬件中。Python 3通过将LRU(最近最少使用的)缓存公开为一个名为lru_cache的装饰器,使得使用它们变得非常简单。

下面是一个简单的Fibonacci函数,我们知道它将从缓存中受益,因为它通过递归多次执行相同的任务。

b2f2c7331e584348933e1bea843ae05f.jpg

现在我们可以使用lru_cache对其进行优化(这种优化技术称为memoization(记忆化))。执行时间从几秒降到几纳秒。

203dfb0c74be47baa28c83bd1518bae2.jpg

扩展的可迭代对象解包 (3.0+)

7aa4f8a3729d435499416b5880d1431c.jpg

数据类 (3.7+)

Python 3引入了数据类,这些数据类并没有太多限制,可以使用它们来减少样板代码,因为装饰器会自动生成特殊的方法,比如__init__() 和__repr()__。根据官方建议,它们被描述为“具有默认值的可变命名元组”。

61daf16af145483aba3d31424ede4b70.jpg

使用数据类的Armor的相同实现。

769fc67fec674f9eae485a9c9e050671.jpg

隐式命名空间包 (3.3+)

结构化Python代码的一种方法是在包中(带有一个__init__.py文件的文件夹)。下面的示例是由官方Python文档提供的。

971f7eed82fa4238b2360014149efaa1.jpg

在Python2中,上面的每个文件夹都必须有一个__init__.py文件,它会将该文件夹转换为一个Python包。在Python3中,随着隐式命名空间包的引入,这些文件就不再需要了。

4ba79e297b1f408096968b9254ff9b2a.jpg

编者注:正如一些人所说,这并不像我在本节中指出的那样简单,从官方的PEP 420规范来看——__init__.py对于普通包仍然是必需的,将它从文件夹结构中删除将会把文件夹变成一个带有附加限制的本地命名空间包,关于本机命名空间包的官方文档对此展示了一个很好的例子,以及命名所有的限制。

结束语英文原文:https://datawhatnow.com/things-you-are-probably-not-using-in-python-3-but-should/

译者:野生大熊猫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

boost库 bind/function的使用

Boost::Function 是对函数指针的对象化封装&#xff0c;在概念上与广义上的回调函数类似。相对于函数指针&#xff0c;function除了使用自由函数&#xff0c;还可以使用函数对象&#xff0c;甚至是类的成员函数&#xff0c;这个就很强大了哈 #include <boost/function.hpp&g…

10恢复出厂设置_Mac系统如何恢复出厂设置

苹果Mac电脑在什么情况下需要恢复出厂设置呢&#xff1f;例如系统数据损坏、遇到无法卸载的恶意软件、错误更新导致、或者你只是想要闲鱼出售你的Mac电脑&#xff0c;这里系统派教你Mac如何恢复出厂设置。我们先简单将恢复出厂分成两步&#xff0c;一是擦除硬盘数据&#xff0c…

依赖注入的三种方式_Java核心知识 Spring原理十 Spring 依赖注入四种方式

构造器注入/*带参数&#xff0c;方便利用构造器进行注入*/ public CatDaoImpl(String message){ this. message message; } setter 方法注入public class Id { private int id; public int getId() { return id; } public void setId(int id) { this.id id; } } 静态工厂注入…

闪退没由报错_关于floor()报错注入,你真的懂了吗?

0x01 简述floor报错注入也有叫group报错注入的&#xff0c;都一样&#xff0c;指的都是他们。floor报错注入我想大多数人跟我一样&#xff0c;都是会用而不明白其中的原理。这个问题困扰了在下好长时间了&#xff0c;所以决定好好研究下&#xff0c;最终产出了这篇文章。0x02 环…

Photoshop(CC2020)未完

基础知识&#xff1a; 概括&#xff1a; Adobe Photoshop&#xff0c;简称PS&#xff0c;是由美国Adobe Systems开发和发行的图像处理软件。属于再加工型软件&#xff0c;是对很多素材的再次加工处理&#xff0c;并非原创型软件。 功能:Photoshop主要处理以像素构成的位图图像…

使用 做签名的post_基础实操|使用jmeter对聊天软件进行接口测试

前言准备上架一款聊天app&#xff0c;上架之前准备做一些测试工作&#xff0c;模拟用户进入房间&#xff0c;维持心跳&#xff0c;房间送礼&#xff0c;发言等行为(因为用的第三方im以及声网&#xff0c;这些都是基于http的)&#xff0c;也不是很懂测试&#xff0c;听老大说过一…

MySQL中主键的选择与磁盘性能

偶然看到了“Fotolog: Scaling the World\s Largest Photo Blogging Community”&#xff0c;才发现很多数据库的优化其实道理都很简单&#xff0c;至高境界是当你面对问题时&#xff0c;是否真正做出了自己的思考&#xff0c;而不仅仅只是经验主义的惯性使然&#xff1a;本文案…

matlab畸变校正代码_关于OpenCV中的去畸变

在opencv中&#xff0c;有关图像或像素点&#xff08;角点&#xff09;去畸变的函数有cv::undistort()&#xff0c;cv::getOptimalNewCameraMatrix()&#xff0c;cv::initUndistortRectifyMap()&#xff0c;remap()&#xff0c;cv::undistortPoints()。其中undistort可以直接对…

redis数据库简介、redis下载及安装(win64位)、node操作redis、redis实现短信校验注册接口

redis简介&#xff1a; 1:内存数据库,同时也能够保存数据到磁盘&#xff1b; 2:比其他的内存数据库有着更多的数据类型&#xff1a; 列表,集合,排序集合,哈希表等; 3:主从结构&#xff1a;数据可以备份到从服务器&#xff1b; 4: Redis数据操作速度快; 5:所有的操作都是原…

go func()和 go_Go的泛型真的要来了—如何使用以及它们是怎么工作的

点击上方蓝色“Go语言中文网”关注我们&#xff0c;领全套Go资料&#xff0c;每天学习 Go 语言你没看错&#xff0c;这里讲的就是 Go 中的泛型。只不过还没有正式发布&#xff0c;是基于草案设计的&#xff0c;已经是实现了可运行的版本。所以&#xff0c;泛型到来真的不远了&a…

bios设置_bios怎么设置显存 bios设置显存教程【图文】

有些用户可能会发现打开电脑系统信息窗口显示的内存容量与实际容量不同&#xff0c;例如系统内存显示4G&#xff0c;可用3.73G。那么不可用的那部分内存到哪里去了呢?其实是被集成显卡占用当做显存使用了。下面我们就通过 bios设置显存 来调整占用内存容量的大小&#xff0c;我…

4变形物体_Houdini基础(二)曲线变形物体

设想&#xff1a;先从二维上来看直角坐标系。物体是由x&#xff0c;y两个轴向的数据组成的。少了其中一组数据物体就只能是分布在单一轴向上的点。单独保留物体x、y情况下的点分布情况现在将x、y加起来&#xff0c;可见在三维空间中形成了一个平面。仅有x、y坐标的物体从目前的…

mybatis 映射成多个list_SSM:Mybatis架构与原理

MyBatis功能架构设计功能架构讲解&#xff1a;我们把Mybatis的功能架构分为三层&#xff1a;API接口层&#xff1a;提供给外部使用的接口API&#xff0c;开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层&…

10无法勾选隐藏的项目_Excel超好用的隐藏操作,不可多得

日常工作中&#xff0c;表格数据的展示与隐藏也是有大学问的&#xff0c;为了表格更加简洁明了、美观大气&#xff0c;实用的隐藏技巧就派上用场了。且听小翼慢慢分享~1、隐藏行列方法1&#xff1a;选中目标区域&#xff0c;右击鼠标选择“隐藏”即可。如图&#xff1a;方法2&a…

HTML5简略介绍

今天要说下 HTML5特有的一个元素 canvas &#xff0c;旨在让web页面上作矢量图不需要在依靠flash或是其他插件&#xff0c;在网页上使用canvas元素时&#xff0c;它会创建一块矩形区域&#xff0c;默认300*150&#xff0c;当然也是可以自定义的。Canvas中的坐标是从左上角开始的…

我的世界java和基岩版哪个好玩_我的世界:Java版本好玩还是基岩版好玩?老玩家看完后沉默了...

MC刚开始是在国外风靡了起来&#xff0c;传到中国的时候MC已经火了很久了&#xff0c;这时候外国已经出现了很多玩MC十分厉害的大神和主播&#xff0c;而在国外也有超多的服务器&#xff0c;其中有号称最强的原版生存服务器Scicraft&#xff0c;而在版本方面MC其实算下来大概有…

SQL Server简介

SQL Server是微软的一款关系型数据库。某些平台吹得天花烂坠&#xff0c;今天第一次在自己的项目中使用了下&#xff0c;感觉不是那么好&#xff0c;特别是SQL语句的支持度还是很欠缺&#xff0c;如limit等都不支持&#xff0c;还有特别单双引号都是需要特别注意的,下面是SQL S…

Windows下断言的类型及实现

一、内容综述 本文主要介绍Windows下断言assert的实现&#xff0c;并总结断言的不同应用准则。最后给出一个windows自定义断言的方法。 本文行文参考《Debugging Windows Programs》第三章相关内容&#xff0c;如果有兴趣的话建议读者可以深入阅读下。 二、断言的类型 1. ANSI…

linux右上角不显示网络连接_来体验下Linux吧

在前面的几期中我们从树莓派开始了解Linux&#xff0c;大家可能已经想来试一下手了。趁热打铁&#xff0c;本期我将介绍两种方便体验学习Linux的方法&#xff0c;在线体验或者安装虚拟机。1 在线体验Linux如果想快速的体验下Linux系统&#xff0c;我们可以选择云计算服务商提供…

python md5解密_python 生成文件MD5码

pymd5.py的代码如下&#xff1a; #-*-coding:utf-8-*-Created on 2012-5-25 author: kanpiaoxueimport hashlib import os import sys def printUsage(): print (Usage: [python] pymd5.py ) def createMD5(filePath): if not os.path.isfile(filePath): printUsage() else: tm…