Python 3中被忽视了的三大重要功能

开发 后端
Python 3上线已有一段时间,大多数开发人员(特别是那些首次编程的人)已经在使用它了。不过,你确定已经对Python 3研究透彻了吗?

本文转载自公众号“读芯术”(ID:AI_Discovery)。

Python 3上线已有一段时间,大多数开发人员(特别是那些首次编程的人)已经在使用它了。不过,你确定已经对Python 3研究透彻了吗?

事实上,其中还有许多新功能对大多数人来说仍处于未知状态。本文就将讨论Python 3中三个鲜为人知但非常有用的功能,我在其他语言中接触到并爱上了这些功能,它们的加入使得使Python 3体验更佳。

[[340859]]

枚举

枚举是在Java和Swift中常使用到的功能,我把它扩展到Python中。在Python中创建枚举非常简单,在Python 3之前的版本中也可使用(尽管功能更受限):

  1. from enum importEnum 
  2.              classState(Enum): 
  3.         AIR=0 
  4.         LAND=1 
  5.         SEA=2 
  6.         myState =State.AIR             # Prints 0 
  7.       print(myState.value) 
  8.       # Prints AIR 
  9.       print(myState.name) 

在上述代码中,可以看到通过构造一个类并使其成为枚举的子类,便可以轻松构造枚举。在这里只需在下面的行中定义每个状态。就我而言,我有AIR、LAND、SEA。

Python3的新功能是运行.value和.name。这能获得与状态相关联的整数值或与之相关联的字符串。

在上面的代码中,输入State.LAND.name 返回LAND,因此功能不仅仅是一个整数枚举。

当需要描述性常量时,代码中的枚举类型十分有用。例如,与其检查状态是0还是1,不如检查它是否是State.MOVING或State.STATIONARY状态. 。常量可能会改变,如果有人在看你的代码,MOVING比0更有意义,代码的可读性也会大大提高。

[[340860]]

图源:unsplash

格式

在Python 3.6中添加的fstring是格式化文本的一种很好的方式。它们的可读性强,而且不容易出错。fstring比Python以前使用的格式更易读。以下是使用格式的示例:

  1. name ='Brett' 
  2.        blog_title ='Medium' 
  3.              # Hi, my name isBrett and I am writing on my Medium blog. 
  4.        a ="Hi, myname is {} and I am writing on my {} blog.".format(name,blog_title) 

如上所示,在字符串中打入括号,然后按顺序列出每个变量的名称。相同代码任务很多,但fstring极大地增加了代码的可读性,尤其是类似于用Swift格式化字符串。

  1. name ='Brett' 
  2.        blog_title ='Medium' 
  3.              # Hi, my name isBrett and I am writing on my Medium blog. 
  4.        a =f"Hi, myname is {name} and I am writing on my {blog_title} blog." 

为了完成这个更简洁的字符串,只需在引号前面加上字母f,然后将变量或数据直接放入括号中,而不是使用空括号。由于变量本身是写在括号内的,所以不必计算格式中写入的项的数量来确定变量的位置,变量就在应在的位置。

相比于字符串连接或格式化字符串,fstring可以生成更可读、更可靠的代码。

数据类

数据类可能要比上述所谈更为晦涩难懂,所以我将简要地解释一下。我在Kotlin中逐渐喜欢上了数据类,因此很想在Python中使用它们。

数据类实际上是一个类,其唯一目的是保存数据的类。类将具有可以访问和写入的变量,但上面没有额外的逻辑。

假设你有一个程序,在不同的类之间传递一个字符串和一个数字数组。使用pass(str,arr)这样的方法也可行,最好是创建一个只包含字符串作为字段和数组的数据类。通过创建一个数据类,你所做的将更加清晰,单元测试也将更加容易。

下面这个示例将说明如何创建一个表示三维向量的简单数据类,但这可以很容易地扩展为表示不同数据的任意组合:

  1. from dataclasses import dataclass 
  2.              # Definedataclass 
  3.            @dataclass 
  4.            classVector3D: 
  5.               x: int 
  6.               y: int 
  7.               z: int 
  8.                            # Create a vector           u =Vector3D(1,1,-1) 
  9.              # Outputs: Vector3D(x=1,y=1z=-1) 
  10.            print(u) 

在这里,你可以看到数据类的定义与声明普通类非常相似,只是我们先用了@dataclass,然后每个字段的名称都是name:type。

虽然我们创建的Vector3D功能有限,但是数据类的目的只是提高效率并减少代码中的错误,传递Vector3D比传递int变量要好得多。

以上三点就是我的新发现。你在Python 3中尝试过哪些鲜为人知的功能呐?

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2024-02-29 07:48:55

Python编程语言上下文管理器

2023-08-04 14:31:43

Python核心项目

2009-12-03 14:22:57

2010-01-28 10:11:18

IT金饭碗

2012-08-21 11:03:36

2009-11-17 16:14:28

无线路由器

2019-11-04 09:32:50

云计算数据中心技术

2022-06-27 11:58:18

智能制造网络安全工业 4.0

2013-08-01 13:55:55

Android 4.3新特性

2009-11-09 09:57:39

交换机路由器

2022-10-20 07:47:46

2011-11-03 16:27:26

服务器虚拟化云计算

2012-11-28 15:53:16

灾难恢复

2019-01-18 13:22:10

布线事项网络

2023-10-24 18:05:00

2015-05-20 11:06:54

2013-01-22 09:21:28

云计算成本私房云

2010-06-24 13:57:57

Linux Cat命令

2010-03-15 17:24:25

第三层交换机

2010-01-22 15:45:57

局域网交换机
点赞
收藏

51CTO技术栈公众号