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

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

bfd74f36897f3bc61f3644a30282461b.png图源:unsplash

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

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

b4a372ca381d44f3849458054ed7e8f1.png

枚举

枚举是在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更有意义,代码的可读性也会大大提高。

0ab0daf119e46cb1ad54e7dbf6e0c94b.png图源:unsplash

b4a372ca381d44f3849458054ed7e8f1.png

格式

在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可以生成更可读、更可靠的代码。

b4a372ca381d44f3849458054ed7e8f1.png

数据类

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

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

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

67bd8cdeb64273154f6ab1dbe112690f.png图源: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中尝试过哪些鲜为人知的功能呐?

b399c328cbb6bc95f292f78fa8e14db5.png

留言点赞关注

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础总结(一)

1. 面向对象的特征面向对象的特征包括抽象、封装、继承和多态。 抽象就是忽略一个主题中与当前目标无关的某些方面,以便更加充分的注意到与当前目标有关的方面。抽象并不打算了解全部的问题,而只是其中的一部分,暂时不用考虑细节。抽象包括两…

java 2分代复制垃圾回收_Java对象的后事处理——垃圾回收(二)

1 先谈Finalize()finalize()能做的所有工作,使用try-finally或者其他方式都可以做得更好、更及时,所以笔者建议大家完全可以忘掉Java语言中有这个方法的存在。——《深入理解JVM》finalize()方法确实可以实现一次对象的自救,但是其不确定性和…

前端学习(1555):ng-app指令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

前端学习(1556):ng-blnd指令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

标准输入输出重定向

程序会在运行中输出日志&#xff0c;并是通过java的日志类进行输出的。而如果关掉SSH运行程序&#xff0c;就会丢失这些信息。直观的解决办法是将输出到控制台的日志重定向到文件中&#xff0c;于是我将命令改为&#xff1a;sh auto.sh > console.txt &。不过事实并没像…

Java虚拟机学习 - 体系结构 内存模型(转载)

一&#xff1a;Java技术体系模块图二&#xff1a;JVM内存区域模型1.方法区 也称"永久代” 、“非堆”&#xff0c; 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB&#xff0c;最大值为64MB&#xff0c;可以通过-XX:PermSiz…

前端学习(1558):ng-repeat命令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

前端学习(1559):ng-classt隔行变色

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

在Win7虚拟机下搭建Hadoop2.6.0伪分布式环境

近几年大数据越来越火热。由于工作需要以及个人兴趣&#xff0c;最近开始学习大数据相关技术。学习过程中的一些经验教训希望能通过博文沉淀下来&#xff0c;与网友分享讨论&#xff0c;作为个人备忘。 第一篇&#xff0c;在win7虚拟机下搭建hadoop2.6.0伪分布式环境。 1. 所需…

前端学习(1560):ng-class颜色切换

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {backgr…

MVC常见的控制器,接口,数据层之间的操作

user_books_info 类 namespace CiWong.LearningLevel.Mapping {public class user_books_info{/// <summary>/// 使用对象ID,个人版存放会员ID&#xff0c;班级版存放班级ID&#xff0c;校园版存放校园ID/// </summary>public long user_id { get; set; }/// <s…

前端学习(1561):ng-class颜色切换

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

S3C6410 裸机硬件JPEG解码(转)

源&#xff1a;S3C6410 裸机硬件JPEG解码转载于:https://www.cnblogs.com/LittleTiger/p/4681864.html

java layoutmanager_Java Swing 探索(一)LayoutManager

BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout1.BorderLayoutjava.lang.Object--java.awt.BorderLayout将版面划分成东、西、南、北、中五个区域&#xff0c;将添加的组件按指定位置放置。BorderLayout.EAST BorderLayout.WEST BorderLay…

解决虚拟机VMware安装CentOS7.0识别不到网卡

由于Vmware虚拟网卡和linux兼容问题导致驱动无法正常安装&#xff0c;默认的网卡类型不兼容. 解决方法 找到我们的Vmware虚拟机文件夹&#xff0c;将VMware 虚拟机配置 (.vmx)&#xff0c;追加一条设置我们网卡类型 ethernet0.virtualDev "e1000" 原因 VMware 都在虚…

前端学习(1562):ng-hide,ng-show

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

java socat_socat安装使用方法

socat&#xff0c;一个多功能的网络工具&#xff0c;名字来源于SOcket CAT&#xff0c;是netcat的增强版&#xff0c;也就是netcat(扩展了设计&#xff0c;并有新的实现)。------------------------------------------------------------------------0x01 安装# debian/ubuntua…

前端学习(1563):ng-if

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

java spring注入 静态方法_java相关:spring为类的静态属性实现注入实例方法

java相关&#xff1a;spring为类的静态属性实现注入实例方法发布于 2020-3-31|复制链接在本篇文章里小妖给大家整理的是关于spring为类的静态属性实现注入实例方法&#xff0c;有需要的朋友们可以参考下。我们知道&#xff0c;正常情况下&#xff0c;spring的一个bean要依赖其他…