当前位置: 首页 > 科技观察

Python3中被忽视的三个重要功能

时间:2023-03-11 21:09:03 科技观察

Python3已经出现一段时间了,大多数开发者(尤其是那些第一次编程的开发者)已经在使用它了。不过,您确定您已经彻底研究了Python3吗?事实上,还有很多新功能是大多数人还不知道的。本文将讨论我在其他语言中遇到并爱上的Python3中三个鲜为人知但非常有用的特性,它们的加入使Python3体验更加出色。Enumeration枚举是Java和Swift中常用的功能,我把它扩展到了Python。在Python中创建枚举非常简单,适用于Python3之前的版本(尽管功能更有限):fromenumimportEnumclassState(Enum):AIR=0LAND=1SEA=2myState=State.AIR#Prints0print(myState.value)#PrintsAIRprint(myState.name)在上面的代码中,您可以看到通过构造一个类并将其作为枚举的子类,可以很容易地构造一个枚举。这里只是在下面的行中定义每个状态。就我而言,我有AIR、LAND、SEA。Python3的新功能是运行.value和.name。这可以获取与状态关联的整数值或与其关联的字符串。在上面的代码中,键入State.LAND.name会返回LAND,因此功能不仅仅是一个整数枚举。当需要描述性常量时,代码中的枚举类型很有用。例如,不是检查状态是0还是1,而是检查它是State.MOVING还是State.STATIONARY。.常数可能会改变,如果有人在看你的代码,MOVING比0更有意义,代码的可读性大大提高。来源:unsplashformatPython3.6中添加的fstring是格式化文本的好方法。它们更具可读性且不易出错。fstring比Python习惯的格式更具可读性。下面是使用格式的示例:name='Brett'blog_title='Medium'#Hi,mynameisBrettandIamwritingonmyMediumblog.a="Hi,mynameis{}andIamwritingonmy{}blog.".format(name,blog_title)如上所示,在在string中键入括号,然后按顺序列出每个变量的名称。同一段代码有很多任务,但是fstring大大增加了代码的可读性,尤其类似于Swift中格式化字符串。name='Brett'blog_title='Medium'#Hi,mynameisBrettandIamwritingonmyMediumblog.a=f“嗨,mynameis{name}andIamwritingonmy{blog_title}blog。”要完成这个更简洁的字符串,只需在引号前加上字母f,然后将变量或数据直接放在括号中,而不是使用空括号。由于变量本身是写在括号内的,所以你不必计算格式中写入的项数来确定变量在哪里,变量就在它应该在的地方。fstring可以生成比字符串连接或格式字符串更具可读性和可靠性的代码。数据类数据类可能比上面的更晦涩,所以我将简要解释一下。我已经越来越喜欢Kotlin中的数据类,并且渴望在Python中使用它们。数据类实际上是一个以保存数据为唯一目的的类。类将具有可以访问和写入的变量,但上面没有额外的逻辑。假设您有一个程序在不同的类之间传递一个字符串和一个数字数组。使用pass(str,arr)之类的东西也可以,最好创建一个只包含字符串作为字段和数组的数据类。通过创建数据类,您正在做的事情会更清楚,单元测试也会更容易。以下示例将展示如何创建表示三维向量的简单数据类,但这可以轻松扩展以表示不同数据类的任意组合:fromdataclassesimportdataclass#Definedataclass@dataclassclassVector3D:x:inty:intz:int#Createavectoru=Vector3D(1,1,-1)#Outputs:Vector3D(x=1,y=1,z=-1)print(u)这里可以看到数据类的定义和普通类,但我们首先使用@dataclass,然后每个字段的名称是name:type。虽然我们创建的Vector3D功能有限,但数据类的目的只是为了提高效率和减少代码中的错误,传递一个Vector3D比传递一个int变量要好得多。以上三点是我的新发现。你在Python3中尝试过哪些鲜为人知的特性?