python中什么最重要_Python 3中被忽视了的三大重要功能
全文共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中被忽视了的三大重要功能相关推荐
- python的目的及应用_python Django中的apps.py的目的是什么_python_脚本之家
This question has been asked earlier: 07000 Application configuration objects store metadata for an ...
- python启动多个进程_Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- python中update啥意思_python 列表中的Update()函数
简介 Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法 d.update(e) 参数说明 将e中键-值对添加到字典d ...
- python安装进度条不动_python – tkinter中的进度条不起作用
我正在写一个小应用程序来复制一些文件.我做了几乎所有我想要的东西,但有三件事: 1)复制选项处于运动状态时移动的进度条.我可以显示它,但它不会反应. 我用这个来表明它: self.p = ttk.Pr ...
- python字典一键多值_python字典中如何一键多值的写入?
python字典中如何一键多值的写入? python字典中一键多值写入的方法: 1.循环写入字典key.value.删除指定的键值对: 原文本'jp_url.txt'每行元素以逗号分隔:host_ke ...
- python支付程序源码_python项目中实现支付宝网页支付
支付流程 在一次项目中需要引入支付宝接口实现支付宝支付,使用场景如下: 用户在我方商户系统中选择了购买商品,我方商户系统生成一张支付订单,用户点击订单的支付按钮后,页面会跳转到一个支付二维码的界面. ...
- python遍历任意层次字典_Python递归中 return 代码陷阱
1 #获取字典中的objkey对应的值,适用于字典嵌套 2 #targetDict:要查找的字典;serchKey:要查找的目标key 3 #ret:递归过程中,向外部(上层)传送 return值.被 ...
- python统计字符在文件中出现的次数_python字符串中字符出现次数(python获取字符串个数)...
今天要说的是Python的字符串函数还是很方便的,只需要调用 count() 方法即可. 最近,我在一个网站上看到了一个自然语言处理课程.我详细解释了一些方法的使用,用例很容易理解,所以我想通过我的博 ...
- python里compile的作用_Python代码中compile()函数具有哪些功能呢?
摘要: 下文讲述Python代码中compile()函数的功能说明,如下所示: compile()函数功能说明 compile()函数功能: 用于将一个字符串编译为字节代码 compile()函数语法 ...
- python中typeerror怎么解决_Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法...
目前正在学习python,使用的工具为python3.2.3.发现3x版本和2x版本有些差异,在套接字编程时,困扰了我很久,先将python核心编程书中的例子 代码如下: 服务器端: #Echo se ...
最新文章
- 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)
- Git clone时出现Please make sure you have the correct access rights and the repository exists.问题已解决。
- [转]Android中程序与Service交互的方式——交互方式
- MyBatis 通用Mapper 入门教程
- aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java
- 看动画学算法之:平衡二叉搜索树AVL Tree
- iPhone 12来了!苹果官宣第二场新品发布会时间,10月14日见!
- 外接鼠标键盘无反应处理
- linux 配置远程日志服务器配置,配置远程日志服务器—实现日志的集中管理
- 【微服务直播】60分钟掌握微服务治理之道
- flink cdc 2.0.0 sql 开发模板,及踩坑记录
- 安卓h5 微信 字体大小影响h5样式bug
- 微信小程序新手教程 1.0
- 波粒二象性仿真理论(一) Wave Particle Duality Principle
- 人工智能——文本分类(大作业必备)
- 爬取斗鱼直播平台的所有房间信息
- Excel时间做差,统计加班时长
- 如何快速了解一个系统
- 使用cmd命令修改IP地址
- BootStrap-Table主子表
热门文章
- 前端学习(1615):前端系列实战课程之javascript简介
- 前端学习(542):node得环境搭建
- 前端学习(525):等分布局
- 第九十四期:GitHub 发布 2019 年年度报告
- 第二十三期:程序员节Keep被曝突然裁员300多人,60%是开发和运营
- java学习(84):object常用方法tostring,equals,hashcode
- Qt编写的线损分析工具
- CSS之calc()使用
- ES6之Module 的加载实现(2)
- Linux与C++11多线程编程(学习笔记)