当前位置: 首页 > 科技观察

您不知道的9个Python3功能

时间:2023-03-19 18:51:50 科技观察

由于PythonEOL,一些开发人员已开始将他们的Python版本从2切换到3。最显着的变化之一是Python3中的print()函数取代了print函数在Python2中。但是,如果在print关键字后添加一个空格,则括号在Python2中有效,因为解释器将其视为表达式。下面是对一些稀有特性的解释,这些特性只存在于Python3中,旨在快速解决Python问题。所有示例均使用Python3.8.0进行编码。1.枚举Python3允许您以简单的方式在Enum类中编写枚举。枚举由简化读写的类语法组成,但没有任何结构——代码不容易生成。fromenumimportEnum,autoclassFruit(Enum):APPLE=auto()ORANGE=auto()GUAVA=auto()print(Fruit.APPLE)#Fruit.APPLE当精确值不重要时,可以使用自动值代替。枚举是与特定固定值关联的符号项(成员)的集合。在枚举中,符号名称可以通过命名以及单独迭代枚举来区分。forfruitinFruit:print(fruit)->Fruit.APPLE->Fruit.ORANGE->Fruit.GUAVA最低要求Python版本:3.42。Typehintsvs.dynamic,statictyping是计算机语言中的热门话题,大家认同,各有各的看法。我会让观众考虑什么时候写一个类型。但是,我觉得您必须知道Python3支持类型提示。deffruits_word(line:str)->bool:return"fruit"inlinetest=fruits_word("Ilovetoeatfreshfruits")print(test)#True最低要求的Python版本:3.53。PathlibF字符串是不可思议的,但是诸如文件路径之类的字符串有自己的库,这使得操作它们更加容易。Pathlib模块简化了各种复杂的情况,也优化了一些简单的情况。作为处理文件路径的方便抽象,Python3提供了pathlib。frompathlibimportPathroot=Path('blog_new_folder')print(root)#blog_new_folderpath=root/'new_program'print(path.resolve())#/home/vivekcoder/Workspace/My_Programming/Medium-Articles/python3_uncommon_features/blog_new_folder/new_program我觉得这个本文将启发您在需要处理Python文件时使用PythonPathlib模块。最低要求的Python版本:3.44。F-Strings在没有字符串的情况下,任何编程语言都很难做任何事情,并且您想使用结构化方法来高效地处理字符串。大多数使用Python的人更喜欢使用格式化方法。importdatetimename="雷杰"activity="writingToutiaoarticle"time=datetime.date(2020,8,15)message='Mynameis{},Icompletedanactivity{}on{}.'.format(name,activity,time)print(message)#MynameisLeijie,我在2020-08-15完成了活动写头条文章。除了格式化之外,Python3还提供了通过f-strings对字符串进行插值的通用方法。上面带有f-string的代码如下所示::%A,%B%d,%Y}.'print(message)#我的名字是雷杰,我在2020年8月15日星期六完成了写头条文章的活动。与字符串连接或格式化字符串相比,F-Strings创建的代码更容易理解和使用。F字符串允许使用最少的语法将表达式集成到字符串文字中。需要注意的是,f-Strings实际上是运行时表达式,而不是固定值。最低要求的Python版本:3.65。内置LRU缓存如果最近的呼叫是传入呼叫的??最佳预测器,则LRU(最近最少使用)缓存性能良好。(例如,最常见的新闻服务器帖子每天都在变化)。缓存的大小限制意味着如果没有像web服务器那样长时间运行的循环,缓存将不会增长。定义用户函数时,它必须是可调用的。这使得在Python3中可以将lru_cache装饰器直接应用于用户函数。下面是一个斐波那契函数的例子,我们知道它将从缓存中受益,因为通过递归,它可以多次执行相同的工作。importtimedeffibon(number:int)->int:ifnumber==0:return0ifnumber==1:return1返回fibon(number-1)+fibon(number-2)start=time.time()fibon(20)print(f'Duration:{time.time()-start}s')->Duration:0.007005214691162109s这里我们可以使用lru-cache来配置。(这种优化方法称为记忆)。覆盖可调用函数的装饰器,带有存储最近调用的最大大小的备忘录。fromfunctoolsimportlru_cache@lru_cache(maxsize=512)defib_memoization(number:int)->int:ifnumber==0:return0ifnumber==1:return1返回fib_memoization(number-1)+fib_memoization(number-2)start=time.time()fib_memoization(20)print(f'Duration:{time.time()-start}s')->Duration:4.341516078231e-09s所需的最低Python版本:3.26。扩展的可重复拆包我将允许代码在下面响应。举例说明函数,胜过1000字:x,*y,z=range(4)print(x,y,z)#0[1,2]3python_version,file_name,topic,*output="python3.0hello.pybetterprogramming1234".split()print(python_version)print(file_name)print(topic)print(output)#python3.0#hello.py#betterprogramming#['1','2','3','4']a,b,c,*d=range(7)print(b,d)#1[3,4,5,6]最低要求的Python版本:3.0更多扩展迭代解压信息,参见官方Python3文档在这里。7.数字文字中的下划线Python3.6提供了一种令人兴奋的方式来通过强调数字来帮助阅读数字文字。它可以用来描述例如千位、十六进制和二进制数。price=50_000print(f'Price:{price}')#Price:50000hexa_val=0xABCD_EFD9print(f'Decimaleequivalent:{hexa_val}')#Decimaleequivalent:2882400217bin_ary=0b_0010_0110print(f'Decimal:{bin_ary}')#Decimal:38minimum需要Python版本:3.68。赋值表达式——“海象”运算符在最新版本的Python中,引入了海象运算符,它允许对表达式进行变量赋值。如果您计划稍后在代码中引用外观并保存一两行代码,这可能会有所帮助。birds=['owl','hen','duck','parrot']forbirdinbirds:if(len_bird:=len(bird))>4:print(f'Abird"{bird}"由"{len_bird}组成",letters')#Abird"parrot"包含"6",letters所需的最低Python版本:3.89。数据类Python3提供的数据类几乎没有限制,由于装饰器会自动生成__init__()和_repr__()等函数,因此可以减少样板代码。官方提案将其列为“具有默认值的可变命名元组”。classItem_list:def__init__(self,name:str,perunit_cost:float,quantity_available:int=0):self.name=nameself.perunit_cost=perunit_costself.quantity_available=quantity_availabledeftotal_cost(self)->float:returnsself.perunit_cost*self.quantity_book=Item_available("betterprogramming.",50,2)x=book.total_cost()print(x)#100print(book)#<__main__.Item_listobjectat0x00000052DB9D2A48>使用@dataclass装饰器,您可以编写相同的实现:fromdataclassesimportdataclass@dataclassclassItem_list:名称:strperunit_cost:floatquantity_available:int=0deftotal_cost(self)->float:returnsself.perunit_cost*self.quantity_availablebook=Item_list("betterprogramming.",50,2)x=book.total_cost()print(x)#100print(book)#Item_list(name='betterprogramming.',perunit_cost=50,quantity_available=2)Python最低要求版本:3.7有关数据类的更多说明,请参阅Python3的官方文档。关键要点没有灵丹妙药,只是小心,努力工作和足够的耐心学习和实践。每一天,你都需要学习新事物并享受你的工作,因为这是你成长的唯一途径。我相信以上见解至少可以向您展示Python3中以前未被识别的一项新功能,并鼓励您开始编写更简洁、更直观的代码。谢谢阅读!原文:https://medium.com/better-programming/9-python-3-features-you-might-not-use-yet-fade13932a3e