9种你不知道的Python 3功能

开发 后端
以下是一些罕见特征的说明,这些特征只能在Python 3中找到,目的是快速解决Python问题。

由于Python EOL,一些开发人员已开始将其Python版本从2转换为3。 最著名的更改之一是Python 3中的print() 函数替换了Python 2中的print函数。但是,如果在print关键字之后添加空格,则括号会在Python 2中起作用,因为解释器会将其视为表达式 。

以下是一些罕见特征的说明,这些特征只能在Python 3中找到,目的是快速解决Python问题。

所有示例均使用Python 3.8.0进行编码。

[[341679]]

1. 枚举

Python 3允许您以简单的方式在Enum类中编写枚举。 枚举由类语法组成,可简化读取和写入的过程,但没有任何结构-代码不易产生。

  1. from enum import Enum, auto 
  2. class Fruit(Enum):    APPLE = auto()    ORANGE = auto()    GUAVA = auto()print(Fruit.APPLE) 
  3. # Fruit.APPLE 

当确切值微不足道时,您可以使用自动值来代替。

枚举是与特定的固定值关联的符号项(成员)的集合。 在枚举中,可以通过命名以及单独迭代枚举来区分符号名称。

  1. for fruit in Fruit: 
  2.     print(fruit) 
  3.  -> Fruit.APPLE 
  4. -> Fruit.ORANGE 
  5. -> Fruit.GUAVA 

最低要求Python版本:3.4

2. 类型提示

相对于动态而言,静态打字是计算机语言中的热门话题,每个人对此都有自己的见解。 我将允许查看者考虑何时编写类型。 但是,我觉得您必须了解Python 3支持类型提示。

  1. def fruits_word(line: str) -> bool: 
  2.   return "fruit" in line 
  3. test = fruits_word("I love to eat fresh fruits") 
  4. print(test)# True 

最低要求Python版本:3.5

3. Pathlib

F字符串令人难以置信,但是诸如文件路径之类的字符串都有其自己的库,这些库使操作它们变得更加容易。 Pathlib模块简化了各种复杂的情况,并且还优化了一些简单的情况。 作为使用文件路径的便捷抽象,Python 3提供了pathlib。

  1. from pathlib import Path 
  2. root = Path('blog_new_folder') 
  3. print(root) 
  4. # blog_new_folder 
  5. path = root / 'new_program' 
  6. print(path.resolve()) 
  7. # /home/vivekcoder/Workspace/My_Programming/Medium-Articles/python3_uncommon_features/blog_new_folder/new_program 

我觉得这篇文章会启发您在需要处理Python文件时使用Python Pathlib模块。

最低要求Python版本:3.4

4. F-Strings

在没有字符串的情况下,很难以任何编程语言执行任何操作,并且您希望使用结构化的方法来使用字符串来保持高效。 大多数使用Python的人都喜欢使用format方法。

  1. import datetime 
  2. name = "Leijie" 
  3. activity = "writing Toutiao article" 
  4. time = datetime.date(2020, 8, 15) 
  5.  message = 'My name is {}, I completed an activity {} on {}.'.format(name, activity, time) 
  6.  print(message) 
  7. # My name is Leijie, I completed an activity writing Toutiao article  on 2020-08-15. 

除了格式外,Python 3还提供了一种通过f字符串插值字符串的通用方法。 上面的带有f字符串的代码如下所示:

  1. import datetime 
  2. name = "Leijie" 
  3. activity = "writing Toutiao article" 
  4. time = datetime.date(2020, 8, 15) 
  5. message = f'My name is {name}, I completed an activity {activity} on {time:%A, %B %d, %Y}.' 
  6.  print(message)# My name is Leijie, I completed an activity writing Toutiao article 
  7.   on Saturday, August 15, 2020. 

与利用字符串连接或格式化字符串相比,F-Strings创建的代码甚至更易于理解和使用。

F字符串允许使用最少的语法将表达式集成到字符串文字中。 应当注意,f-Strings实际上是运行时表达式,而不是固定值。

最低要求Python版本:3.6

5. 内置LRU缓存

如果最新的呼叫是传入呼叫的最佳预测器,则LRU(最近最少使用)的缓存性能会很好。 (例如,最常见的新闻服务器帖子每天都会变化)。 缓存的大小限制意味着,如果没有像Web服务器这样的长时间运行的循环,缓存就不会扩展。

定义用户功能时,它必须是可调用的。 这使得在Python 3中可以将lru_cache装饰器直接应用于用户函数。

下面是一个斐波那契函数的示例,我们知道该函数将从缓存中受益,因为通过递归,它可以多次执行相同的工作。

  1. import time 
  2. def fibon(number: int) -> int: 
  3.     if number == 0: return 0 
  4.     if number == 1: return 1 
  5.     return fibon(number-1) + fibon(number-2) 
  6. start = time.time()fibon(20) 
  7. print(f'Duration: {time.time() - start}s') 
  8. -> Duration: 0.007005214691162109s 

在这里,我们可以利用lru-cache对其进行配置。 (这种优化方法称为备忘录)。 装饰器涵盖了一个具有备忘录的可调用函数,该函数可存储最近调用的最大大小。

  1. from functools import lru_cache 
  2. @lru_cache(maxsize=512
  3. def fib_memoization(number: int) -> int: 
  4.     if number == 0: return 0 
  5.     if number == 1: return 1 
  6.         return fib_memoization(number-1) + fib_memoization(number-2) 
  7. start = time.time()fib_memoization(20) 
  8. print(f'Duration: {time.time() - start}s') 
  9. -> Duration: 4.341516078231e-09s 

最低要求Python版本:3.2

6. 扩展的可重复拆包

我将允许代码在下面回应。 一个示例描述了功能,该功能优于1000个单词:

  1. x, *y, z = range(4) 
  2. print(x, y, z) 
  3. # 0 [1, 2] 3 
  4. python_version, file_name, topic, *output = "python3.0 hello.py betterprogramming 1 2 3 4".split() 
  5. print(python_version) 
  6. print(file_name) 
  7. print(topic) 
  8. print(output) 
  9. # python3.0 
  10. # hello.py# betterprogramming# ['1', '2', '3', '4'] 
  11. a, b, c, *d = range(7) 
  12. print(b, d) 
  13. # 1 [3, 4, 5, 6] 

最低要求Python版本:3.0

有关扩展的可迭代解压缩的更多信息,请参见此处的官方Python 3文档。

7. 数字文字中的下划线

Python 3.6提供了一种令人兴奋的方法,可以通过强调数字来帮助阅读数字文字。 它可以用于描述例如数千个,十六进制和二进制数。

  1. price = 50_000 
  2.  print(f'Price: {price}') 
  3.  # Price: 50000 
  4. hexa_val = 0xABCD_EFD9 
  5.  print(f'Decimal equivalent: {hexa_val}') 
  6.  # Decimal equivalent: 2882400217 
  7. bin_ary = 0b_0010_0110 
  8.  print(f'Decimal: {bin_ary}') 
  9.  # Decimal: 38 

最低要求Python版本:3.6

8. 赋值表达式-“海象”运算符

在Python的最新版本中,引入了walrus运算符,该运算符可对表达式进行变量分配。 如果您打算稍后在代码中引用外观,则可能会有所帮助,并且可以节省一行或两行代码。

  1. birds = [‘owl’, ‘hen’, ‘duck’, ‘parrot’] 
  2. for bird in birds:    if (len_bird :len(bird)) > 4: 
  3.         print(f’A bird “{bird}” consists of “{len_bird}”, letters’)# A bird “parrot” consists of “6”, letters 

最低要求Python版本:3.8

9. 数据类

Python 3提供的数据类几乎没有什么限制,并且由于装饰器会自动生成诸如__init __()和__repr __()之类的独特方法,因此可用于减少样板代码。 官方提案将其列为“具有默认值的可变命名元组”。

  1. class Item_list: 
  2.     def __init__(self, name: str, perunit_cost: float, quantity_available: int = 0): 
  3.         self.name = name 
  4.         self.perunit_cost = perunit_cost 
  5.         self.quantity_available = quantity_available 
  6.             def total_cost(self) -> float: 
  7.         return self.perunit_cost * self.quantity_available 
  8. book = Item_list("better programming.", 50, 2) 
  9. x = book.total_cost()print(x)# 100 
  10. print(book)# <__main__.Item_list object at 0x00000052DB9D2A48> 

使用@dataclass装饰器,您可以编写相同的实现:

  1. from dataclasses import dataclass 
  2. @dataclassclass Item_list:    name: str    perunit_cost: float    quantity_available: int = 0 
  3.     def total_cost(self) -> float: 
  4.         return self.perunit_cost * self.quantity_available 
  5.     book = Item_list("better programming.", 50, 2) 
  6. x = book.total_cost()print(x)# 100 
  7. print(book) 
  8. # Item_list(name='better programming.'perunit_cost=50quantity_available=2

最低要求Python版本:3.7

有关数据类的进一步说明,请参阅Python 3官方文档。

关键要点

没有神奇的秘诀,只有细心,勤劳的工作,以及足够的耐心和实践。 每天,您需要学习新事物并享受工作,因为这是您成长的唯一途径。

我相信上述见解可以为您显示至少一个以前未认识到的Python 3附加功能,并鼓励您开始编写更简洁,更直观的代码。

谢谢阅读!

原文:https://medium.com/better-programming/9-python-3-features-you-might-not-use-yet-fade13932a3e

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2011-09-06 13:56:07

Vista服务器网卡

2022-12-07 08:16:50

Vue 3技巧数组

2015-10-30 09:56:10

WiFiWiFi技术传感

2020-07-28 08:26:34

WebSocket浏览器

2020-06-12 09:20:33

前端Blob字符串

2020-07-31 17:13:28

Python开发工具

2021-12-17 00:10:00

ChromeDevtools功能

2021-01-05 11:22:58

Python字符串代码

2023-12-21 14:40:09

Python编程语言

2020-01-29 19:40:36

Python美好,一直在身边Line

2021-03-25 11:19:34

Windows 10Windows微软

2010-08-23 09:56:09

Java性能监控

2009-12-10 09:37:43

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2022-10-13 11:48:37

Web共享机制操作系统

2019-11-25 14:05:47

Python装饰器数据

2020-02-21 14:55:02

Python代码字符串

2018-04-04 12:05:04

Postgre数据planner

2015-08-03 13:59:55

点赞
收藏

51CTO技术栈公众号