每个人都应该知道的三个罕见的Python 3功能



Python 3已经存在了一段时间,并且相当多的开发人员,尤其是刚开始使用Python的开发人员,已经在使用这种版本的语言。尽管许多新功能得到了广泛使用,但似乎有些遗留了。在本文中,我将介绍三个鲜为人知但有用的功能。我从其他语言中了解它们,它们使Python 3变得很酷。



本文是每个人都应该使用的Python 33个被忽略的功能的翻译



枚举



我在Java和Swift中使用了很多枚举。我现在继续在Python中使用它们。



在Python中声明枚举非常容易,并且有可能在版本3之前(尽管有限制):



from enum import Enum

class State(Enum):
  AIR = 0
  LAND = 1
  SEA = 2
  
myState = State.AIR

#  0
print(myState.value)
#  AIR
print(myState.name)


在上面的代码中,通过声明继承自的类来引入枚举Enum。然后简单描述所有必要的状态。在我的情况:AIRLANDSEA



Python 3中新增的功能是使用.value和的功能.name。它们允许您获取与枚举相对应的数字和字符串。



例如,输出的值State.LAND.name将是LAND



当您需要常量的文本标识符时,枚举在代码中很有用。例如,与其比较状态0或1,不如将其与State.MOVING比较State.STATIONARY。常量可以更改,如果以后有人查看代码,则单词MOVING将提供比0多得多的理解。结果,大大提高了代码的可读性。



有关更多信息,请参见Enum上的Python 3官方文档



格式化



在版本3.6中添加了它,它fstrings是一个功能强大的文本格式设置工具。它们允许更具可读性和无错误的代码(从Java切换后,我很喜欢这些代码)。这比format以前在Python中使用的要好这是一个用法示例format



name = ''
blog_title = 'codeatcpp.com'

# ,          codeatcpp.com.
a = ",   {}       {}.".format(name, blog_title)


很容易注意到字符串内以及列表后的空花括号,并以特定顺序列出了变量的名称。



现在让我们看一下相同的代码,但是使用它fstring更具可读性,并且与Swift的格式化方式非常相似。



name = ''
blog_title = 'codeatcpp.com'

# ,          codeatcpp.com.
a = f",   {name}       {blog_title}."


要获得这样一个整洁的字符串,您只需要f在引号前加上一个字母,然后不用空括号,就可以立即在字符串中写出变量或数据的名称。由于变量是直接写在一行中的,因此无需计算元素的数量并跟踪变量在末尾的放置顺序。他们恰恰是需要他们的价值观的地方。与使用传统方法相比,



使用fstring它使代码更具可读性,并且更易于维护。



资料类别



数据类可能比以前的类更令人困惑,因此需要更多的解释。数据类是我真的很喜欢Kotlin的东西,所以我也喜欢在Python中使用它们。



数据类是其唯一目的是存储数据的类。该类包含可以读取和写入的变量,但没有其他逻辑。



假设您有一个程序,需要在不同的类之间传递字符串和数字数组。您可以使用像pass(str, arr)这样的方法,但是将包含字符串和数组的类作为类的唯一成员,这样会更方便。



使用数据类可以更好地显示您要执行的操作,还可以更轻松地创建单元测试。



下面的示例显示了一个简单的数据类,它是3D向量,但可以轻松扩展以表示不同数据的任意组合:



from dataclasses import dataclass

#   
@dataclass
class Vector3D:
    x: int
    y: int
    z: int
      
#  
u = Vector3D(1,1,-1)

# : Vector3D(x=1, y=1, z=-1)
print(u)


在这里很容易看出,数据类的定义与常规类的定义非常相似,除了使用装饰器@dataclass,然后将每个字段定义为:



尽管创建的类的功能Vector3D非常有限,但是使用数据类的目的是提高效率并减少代码中的错误数量。最好将它作为参数传递而Vector3D不是一组类型变量int



有关装饰器的更多信息,请@dataclass参见Python 3官方文档



结论



在评论中让我知道您如何喜欢这些可能性。听到有关使用新方案的消息将很有趣。祝您编码愉快!



All Articles