全文共2201字,预计学习时长6分钟

图源:unsplash

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

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

枚举

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

from enum importEnum

classState(Enum):

AIR=0

LAND=1

SEA=2

myState =State.AIR

# Prints 0

print(myState.value)

# Prints AIR

print(myState.name)

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

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

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

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

图源:unsplash

格式

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

name ='Brett'

blog_title ='Medium'

# Hi, my name isBrett and I am writing on my Medium blog.

a ="Hi, myname is {} and I am writing on my {} blog.".format(name,blog_title)

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

name ='Brett'

blog_title ='Medium'

# Hi, my name isBrett and I am writing on my Medium blog.

a =f"Hi, myname is {name} and I am writing on my {blog_title} blog."

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

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

数据类

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

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

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

图源:unsplash

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

from dataclasses import dataclass

# Definedataclass

@dataclass

classVector3D:

x: int

y: int

z: int

# Create a vector

u =Vector3D(1,1,-1)

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

print(u)

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

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

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

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

python中什么最重要_Python 3中被忽视了的三大重要功能相关推荐

  1. python的目的及应用_python Django中的apps.py的目的是什么_python_脚本之家

    This question has been asked earlier: 07000 Application configuration objects store metadata for an ...

  2. python启动多个进程_Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

  3. python中update啥意思_python 列表中的Update()函数

    简介 Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法 d.update(e) 参数说明 将e中键-值对添加到字典d ...

  4. python安装进度条不动_python – tkinter中的进度条不起作用

    我正在写一个小应用程序来复制一些文件.我做了几乎所有我想要的东西,但有三件事: 1)复制选项处于运动状态时移动的进度条.我可以显示它,但它不会反应. 我用这个来表明它: self.p = ttk.Pr ...

  5. python字典一键多值_python字典中如何一键多值的写入?

    python字典中如何一键多值的写入? python字典中一键多值写入的方法: 1.循环写入字典key.value.删除指定的键值对: 原文本'jp_url.txt'每行元素以逗号分隔:host_ke ...

  6. python支付程序源码_python项目中实现支付宝网页支付

    支付流程 在一次项目中需要引入支付宝接口实现支付宝支付,使用场景如下: 用户在我方商户系统中选择了购买商品,我方商户系统生成一张支付订单,用户点击订单的支付按钮后,页面会跳转到一个支付二维码的界面. ...

  7. python遍历任意层次字典_Python递归中 return 代码陷阱

    1 #获取字典中的objkey对应的值,适用于字典嵌套 2 #targetDict:要查找的字典;serchKey:要查找的目标key 3 #ret:递归过程中,向外部(上层)传送 return值.被 ...

  8. python统计字符在文件中出现的次数_python字符串中字符出现次数(python获取字符串个数)...

    今天要说的是Python的字符串函数还是很方便的,只需要调用 count() 方法即可. 最近,我在一个网站上看到了一个自然语言处理课程.我详细解释了一些方法的使用,用例很容易理解,所以我想通过我的博 ...

  9. python里compile的作用_Python代码中compile()函数具有哪些功能呢?

    摘要: 下文讲述Python代码中compile()函数的功能说明,如下所示: compile()函数功能说明 compile()函数功能: 用于将一个字符串编译为字节代码 compile()函数语法 ...

  10. python中typeerror怎么解决_Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法...

    目前正在学习python,使用的工具为python3.2.3.发现3x版本和2x版本有些差异,在套接字编程时,困扰了我很久,先将python核心编程书中的例子 代码如下: 服务器端: #Echo se ...

最新文章

  1. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)
  2. Git clone时出现Please make sure you have the correct access rights and the repository exists.问题已解决。
  3. [转]Android中程序与Service交互的方式——交互方式
  4. MyBatis 通用Mapper 入门教程
  5. aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java
  6. 看动画学算法之:平衡二叉搜索树AVL Tree
  7. iPhone 12来了!苹果官宣第二场新品发布会时间,10月14日见!
  8. 外接鼠标键盘无反应处理
  9. linux 配置远程日志服务器配置,配置远程日志服务器—实现日志的集中管理
  10. 【微服务直播】60分钟掌握微服务治理之道
  11. flink cdc 2.0.0 sql 开发模板,及踩坑记录
  12. 安卓h5 微信 字体大小影响h5样式bug
  13. 微信小程序新手教程 1.0
  14. 波粒二象性仿真理论(一) Wave Particle Duality Principle
  15. 人工智能——文本分类(大作业必备)
  16. 爬取斗鱼直播平台的所有房间信息
  17. Excel时间做差,统计加班时长
  18. 如何快速了解一个系统
  19. 使用cmd命令修改IP地址
  20. BootStrap-Table主子表

热门文章

  1. 前端学习(1615):前端系列实战课程之javascript简介
  2. 前端学习(542):node得环境搭建
  3. 前端学习(525):等分布局
  4. 第九十四期:GitHub 发布 2019 年年度报告
  5. 第二十三期:程序员节Keep被曝突然裁员300多人,60%是开发和运营
  6. java学习(84):object常用方法tostring,equals,hashcode
  7. Qt编写的线损分析工具
  8. CSS之calc()使用
  9. ES6之Module 的加载实现(2)
  10. Linux与C++11多线程编程(学习笔记)