Python 3已经存在了一段时间,并且相当多的开发人员,尤其是刚开始使用Python的开发人员,已经在使用这种版本的语言。尽管许多新功能得到了广泛使用,但似乎有些遗留了。在本文中,我将介绍三个鲜为人知但有用的功能。我从其他语言中了解它们,它们使Python 3变得很酷。
本文是每个人都应该使用的Python 3中3个被忽略的功能的翻译。
枚举
我在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
。然后简单描述所有必要的状态。在我的情况:AIR
,LAND
和SEA
。
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官方文档。
结论
在评论中让我知道您如何喜欢这些可能性。听到有关使用新方案的消息将很有趣。祝您编码愉快!