您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python3中可能不会用到的10个功能!但是能让你的代码更简洁直观

时间:2020-07-16 16:54:38  来源:  作者:

由于Python的版本更迭,很多人将自己的Python版本从2换成了3。这两个版本中,有一个非常出名的改变之一是: Python 2中的 print 函数被 Python 3中的 print()函数所代替。但是,如果在print关键字之后添加空格,则括号会在Python 2中起作用,因为解释器会将其视为表达式。 下面,我介绍一些令人吃惊的功能,这些功能只有在Python 3中才能找到。

Python3中可能不会用到的10个功能!但是能让你的代码更简洁直观

 

以下所有示例均使用python 3.8.0进行编码,并且对于该算法,每个功能都涉及最低要求的Python版本我都标注出来了,觉得有用的同学请自觉收藏!

1.f字串(3.6+)

没有字符串的任何编程语言,都很难运行起来。可能你希望使用结构化的方法来处理字符串以保持高效,但是大多数使用Python的人更喜欢使用format方法。

user = “Amritansh”
 action = “coding”
 log_message = ‘User {} has logged in and did an action {}.’.format(
 user,
 action
)
 print(log_message)
 # 用户Amritansh已登录并执行了操作编码

除了 format 方法外,python3 还提供了一种通过 f-strings 插值字符串的通用方法。它与上面使用f字符串的代码相同:

user = “Amritansh”
 action = “coding”
log_message = f’User {user} has logged in and did an action {action}.’
 print(log_message)
 # 用户Amritansh已登录并执行了操作编码

2.Pathlib(3.4+)

f字符串是难以置信的,但是像文件路径这样的字符串有自己的库,那就可以更容易地操作它们了。作为处理文件路径的方便抽象,Python3提供了pathlib。

from pathlib import Path
root = Path(‘post_sub_folder’)
 print(root)
 # 后置子文件夹
path = root / ‘hAppy_user’
#使路径绝对化
 print(path.resolve())
 # /home/weenkus/Workspace/Projects/DataWhatNow- Codes/how_your_python3_should_look_like/post_sub_folder/happy_user

3.类型提示(3.5+)

相对于动态类型而言,静态与动态类型是软件工程领域的热门话题,并且每个人对此都有自己的见解。程序员可以自己决定应该何时编写类型,但是我觉得你至少应该知道python3中支持的类型提示。

def sentence_has_animal(sentence: str) -> bool:
 return “animal” in sentence
sentence_has_animal(“Donald had a farm without animals”)
 # True

4.枚举(3.4+)

Python 3提供了一种简单的方法来在Enum类中编写枚举。 枚举是封装常量列表的有用方法,因此在没有太多结构的情况下,它们不会在代码中随机出现。

from enum import Enum, auto
class Monster(Enum):
 ZOMBIE = auto()
 WARRIOR = auto()
 BEAR = auto()
print(Monster.ZOMBIE)
 # Monster.ZOMBIE

枚举是一组绑定到唯一常量值的符号名(成员)。在枚举中,成员可以通过标识进行比较,并且可以迭代枚举本身。

枚举官方文档:https://docs.python.org/3/library/enum.html

for monster in Monster:
 print(monster)
# Monster.ZOMBIE
 # Monster.WARRIOR
 # Monster.BEAR

5.内置LRU缓存(3.2+)

我们今天使用的软件和硬件,基本上每个水平切片中,都存在缓存。python3通过将LRU(最近已经很少使用)缓存作为一个称为LRU cache的装饰器,使其使用变得非常简单。

从缓存中受益的有基本的Fibonacci函数,因其在递归过程中,多次执行相同的任务。

import time
def fib(number: int) -> int:
 if number == 0: return 0
 if number == 1: return 1
return fib(number-1) + fib(number-2)
start = time.time()
 fib(40)
 print(f’Duration: {time.time() — start}s’)
 # 持续时间: 30.684099674224854s

现在我们可以使用 LRU 缓存来配置它(这种优化技术称为记忆化)。可以让运行时间从秒降低到纳秒。

from functools import lru_cache
@lru_cache(maxsize=512)
 def fib_memoization(number: int) -> int:
 if number == 0: return 0
 if number == 1: return 1
return fib_memoization(number-1) + fib_memoization(number-2)
start = time.time()
 fib_memoization(40)
 print(f’Duration: {time.time() — start}s’)
 # 持续时间: 6.866455078125e-05s

6.扩展的iterable拆包(3.0+)

官方文档在这里:https://www.python.org/dev/peps/pep-3132/

head, *body, tail = range(5)
 print(head, body, tail)
 # 0 [1, 2, 3] 4
py, filename, *cmds = “python3.7 script.py -n 5 -l 15”.split()
 print(py)
 print(filename)
 print(cmds)
 # python3.7
 # script.py
 # [‘-n’, ‘5’, ‘-l’, ‘15’]
first, _, third, *_ = range(10)
 print(first, third)
 # 0 2

7.数据类别(3.7+)

Python 3 提供的数据类几乎没有什么限制,并且由于装饰器会自动生成特殊的方法(例如¼__init__()和__repr __()),因此可用于减少样板代码。 在官方提议中,它们被列为“可变命名的默认元组”

class Armor:
def __init__(self, armor: float, description: str, level: int = 1):
 self.armor = armor
 self.level = level
 self.description = description
def power(self) -> float:
 return self.armor * self.level
armor = Armor(5.2, “Common armor.”, 2)
 armor.power()
 # 10.4
print(armor)
 # <__main__.Armor object at 0x7fc4800e2cf8>

使用数据类实现相同功能的Armor。

from dataclasses import dataclass
@dataclass
 class Armor:
 armor: float
 description: str
 level: int = 1
def power(self) -> float:
 return self.armor * self.level
armor = Armor(5.2, “Common armor.”, 2)
 armor.power()
 # 10.4
print(armor)
 # Armor(armor=5.2, description=’Common armor.’, level=2)

8.隐式命名空间包(3.3+)

构建Python代码的方法之一是在软件包中(带有__init__.py文件的文件夹)。下面的示例由Python的官方文档提供。

sound/                   Top-level package 
 __init__.py             Initialize the sound package
formats/                 Subpackage for file format conversions
__init__.py
 wavread.py
 wavwrite.py
 aiffread.py
 aiffwrite.py
 auread.py
 auwrite.py
 …
effects/                 Subpackage for sound effects
__init__.py
 echo.py
 surround.py
 reverse.py
 …
filters/                 Subpackage for filters
__init__.py
 equalizer.py
 vocoder.py
 karaoke.py
 …

在Python 2中,上方的每个文件夹都必须具有__init__.py文件,该文件将该文件夹转换为Python包。 在Python 3中,一旦引入了隐式命名空间包,就不再需要这些文件。

隐式命名空间包官方文档:https://www.python.org/dev/peps/pep-0420/

sound/                      Top-level package 
 __init__.py                Initialize the sound package
formats/                    Subpackage for file format conversions
wavread.py
 wavwrite.py
 aiffread.py
 aiffwrite.py
 auread.py
 auwrite.py
 …
effects/                    Subpackage for sound effects
echo.py
 surround.py
 reverse.py
 …
filters/                    Subpackage for filters
equalizer.py
 vocoder.py
 karaoke.py
 …

注意:如果你认真观察的话,就会发现它并不像我在本节中所指出的那样简单,它来自正式的PEP 420规范—常规软件包仍然需要 __init__.py,将其从文件夹结构中删除会将其转变为本地名称空间带有附加限制的软件包。

9.数字文字中的下划线(3.6+)

Python3.6提供了一种很好的方法,通过在数字中启用下划线,允许读取数字文本。这可以用来演示,例如:千位、十六进制和二进制数。

cost = 10_000
 print(f’Cost: {cost}’)
 # Cost: 10000
hex_flag = 0xDAFE_FFF8
 print(f’Hex flag: {hex_flag}’)
 # Hex flag: 3674144760
binary = 0b_0011_1001
 print(f’Binary: {binary}’)
 # Binary: 57

Python 3.6通过使数字成为下划线来提供一种允许读取数字文字的绝佳方法。 例如,它可以用于演示:千位、十六进制和二进制数。

10.赋值表达式-“walrus运算符”(3.8+)

在Python的最新版本中,引入了walrus运算符,它能够对表达式进行变量赋值。如果你想在代码中引用表达式,并在代码中保存一两行代码,那么它会非常有用。

animals = [‘dog’, ‘lion’, ‘bear’, ‘tiger’]
for animal in animals:
 if (len_animal := len(animal)) > 4:
 print(f’The animal “{animal}” has “{len_animal}”, letters!’)
# The animal “tiger” has “5”, letters!

总结

可能我上面总结的内容还够不完整,如果你也了解一些我们不常用但是非常有效果的Python功能,欢迎在评论区告诉我们~ 希望以上内容能告诉你以前不知道的Python 3功能,并能让你写出更流畅,更直观的代码。

Python3中可能不会用到的10个功能!但是能让你的代码更简洁直观

 

 



Tags:Python3   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
上次自己整理并做了一次进度条大全,很受欢迎和喜欢,这次升级一下,介绍高级进度条大全的新方法,希望大家喜欢,并收藏和转发,仅供学习分享使用。有点长,适合收藏,慢慢享用。 一:progre...【详细内容】
2020-09-29  Tags: Python3  点击:(146)  评论:(0)  加入收藏
CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成...【详细内容】
2020-09-03  Tags: Python3  点击:(34)  评论:(0)  加入收藏
1 说明:=====1.1 参考文章:https://www.cnblogs.com/xp12345/p/9818435.html1.2 对原代码进行注释,调试,增加PIL法显示中文标示。1.3 获取摄像头实现动态人脸识别。1.4 分为:侦测...【详细内容】
2020-08-24  Tags: Python3  点击:(98)  评论:(0)  加入收藏
AngelSword简介AngelSword是一款由Python3编写的CMS识别工具,界面如下 AngelSword安装纯Python需要装9个模块,分别是paramiko==2.4.2pymongo==3.7.2PyMySQL==0.9.2pexpect==...【详细内容】
2020-07-23  Tags: Python3  点击:(153)  评论:(0)  加入收藏
由于Python的版本更迭,很多人将自己的Python版本从2换成了3。这两个版本中,有一个非常出名的改变之一是: Python 2中的 print 函数被 Python 3中的 print()函数所代替。但是,如果...【详细内容】
2020-07-16  Tags: Python3  点击:(33)  评论:(0)  加入收藏
亲测有效,针对 阿里云, 华为云 centos 7 轻量服务器python ==> 3.7.8pip ==> 3一,打开python官网,找到下载Python的tgz文件,有两种方式下载 (版本可能更新,进官网核实为准) 1,直接在...【详细内容】
2020-07-01  Tags: Python3  点击:(72)  评论:(0)  加入收藏
前言使用Python的伙伴们,经常会用到print输出日志进行调试,那么如何格式化输出字符串?今天跟大家继续分享关于Python的小知识。 说明我们经常会用到%-formatting和str.format()...【详细内容】
2020-06-26  Tags: Python3  点击:(49)  评论:(0)  加入收藏
1 说明:=====1.1 吸烟有害健康!!纯属娱乐和学习python的相关知识。1.2 虽然是娱乐,但是opencv、dlib和python在人工智能、人脸识别、自动化等有很大作用,目前已经或者未来会有更...【详细内容】
2020-06-05  Tags: Python3  点击:(181)  评论:(0)  加入收藏
Python 3.8稳定版于2019年10月14日发布,相信还有很多项目并没有升级到3.8版本,今天有一个项目经理问我:我们项目组要升级到Python3.8,3.8和3.7有什么区别呢?你能不能跟我讲一下...【详细内容】
2020-04-21  Tags: Python3  点击:(58)  评论:(0)  加入收藏
想做一个有趣的项目,首先整理一下思路,如何快速爬取关键信息。并且实现自动翻页功能。 想了想用最常规的requests加上re正则表达式,BeautifulSoup用于批量爬取import requestsi...【详细内容】
2020-04-01  Tags: Python3  点击:(128)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(8)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条