返回顶部
首页 > 资讯 > 后端开发 > Python >Python3你还未get到的隐藏技能是什么
  • 781
分享到

Python3你还未get到的隐藏技能是什么

2023-06-02 06:06:30 781人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python3你还未get到的隐藏技能是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python3你还未get到的隐藏技能在 Python 3 推出后,人们开始逐步将

python3你还未get到的隐藏技能是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

python3你还未get到的隐藏技能

Python 3 推出后,人们开始逐步将基于Python 2 的代码迁移至 Python 3 。但在迁移过程中,很多代码都未能使用到 Python 3 提供的新功能。这里介绍了相关功能,包括字符串格式化处理、文件路径处理、类型提示、内置 LRU 缓存等等,帮助大家更好地利用 Python 3 书写代码。

由于 Python 2 即将退出历史的舞台,许多人都开始将 Python 2 的代码转换为 Python 3 ,但在这一修改过程中,人们似乎只是多加了几个括号,大多数人并没有注意到 Python 3 中激动人心的新功能。这里将介绍 Python 3 中一些有趣的功能,希望这些功能能够帮助大家更加轻松的解决一些问题。

【注】:文中的代码示例基于 Python 3.7 编写,为方便使用,在每个功能后面都列出了该功能所需的最低 Python 版本。

f-strings (3.6+)

对任何一种编程语言来说,字符串处理是一项很重要的内容,字符串处理往往是很多程序的基础部分。由于人工处理字符串非常繁琐,我们更希望用一种结构化的方法来处理它们。在 Python 中,我们一般使用 fORMat 来进行结构化字符串处理,如下所示:

user = "Jane Doe"action = "buy"log_message = 'User {} has logged in and did an action {}.'.format( user, action)print(log_message)# User Jane Doe has logged in and did an action bu

除了 format 之外, Python 3 还提供了一个更加灵活的方法来处理字符串,那就是 f-string 。如下所示,我们用 f-string 来和实现上面代码相同的功能:

user = "Jane Doe"action = "buy"log_message = f'User {user} has logged in and did an action {action}.'print(log_message)# User Jane Doe has logged in and did an action buy.

Pathlib (3.4+)

如果需要处理文件路径,我们可以使用 Python 3 中的 pathlib 库,使对文件路径的操作更加便捷。如果你对 pathlib 存在疑惑,可以参考这篇文章。下面提供了一个代码示例:

from pathlib import Pathroot = Path('post_sub_folder')print(root)# post_sub_folderpath = root / 'happy_user'# Make the path absoluteprint(path.resolve())# /home/weenkus/Workspace/Projects/DataWhatNow-Codes/how_your_python3_should_look_like/post_sub_folder/happy_user

类型提示 (3.5+)

静态类型与动态类型是软件工程中的一个热门话题,Python 3 提供了支持 type hinting(类型提示)的方法,下面提供了一个示例:

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

枚举 (3.4+)

Python 3 中的 Enum 类支持枚举功能,可以使我们的程序变得更加简洁。 Enum 是一种便捷的变量列表的打包方式,使用该方法能够避免多个变量在代码各处分布,使代码显得杂乱无章。

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

枚举是一个符号集合,每个符号都和唯一的变量对应。通过使用枚举,我们可以通过符号标识来比较各个成员,我们还可以对枚举本身进行迭代。

https://docs.python.org/3/library/enum.htmlfor monster in Monster: print(monster) # Monster.ZOMBIE# Monster.WARRIOR# Monster.BEAR

内置的 LRU 缓存 (3.2+)

在现如今使用的硬件和软件中,缓存无所不在。Python 3 通过 lru_cache 来使用 LRU (Least Recently Used) 缓存。

下面的代码定义了一个斐波拉契函数,由于该函数的运算需要多次递归,每次递归都会执行相同的工作,因此使用缓存能够加速它的计算。

import timedef 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')# Duration: 30.684099674224854s

我们可以使用 lru_cache 来优化该运算。这种优化极技术称为 memoization ,它能够把执行时间从几秒缩减到几纳秒。

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')# Duration: 6.866455078125e-05s

扩展的可迭代解析功能(3.0+)

这里不做详细解释,直接贴出示例代码,具体解决可以参考这篇文档。

head, *body, tail = range(5)print(head, body, tail)# 0 [1, 2, 3] 4py, 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

数据类(3.7+)

Python 3 引入了数据类 (data class)。其装饰器会自动生成特征方法,例如 __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.levelarmor = Armor(5.2, "Common armor.", 2)armor.power()# 10.4print(armor)# <__main__.Armor object at 0x7fc4800e2cf8>

接来下我们使用数据类来实现上面的代码:

from dataclasses import dataclass@dataclassclass 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.4print(armor)# Armor(armor=5.2, description='Common armor.', level=2

隐式命名空间包(3.3+)

构建Python代码有很多方法,其中一种就是在包(packages)中进行构建(即包含一个 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 中,通过使用隐式命名空间包(Implicit Namespace Package: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 Specification 指出,对于一些常规的包,init.py 仍然是需要的 ,如果将该文件删除,就会把该 Python 包变成一个本地的命名空间包,这将会产生一些额外的限制,具体可以参考这篇文档。

总结

关于Python3你还未get到的隐藏技能是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网Python频道了解更多相关知识。

--结束END--

本文标题: Python3你还未get到的隐藏技能是什么

本文链接: https://lsjlt.com/news/229156.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python3你还未get到的隐藏技能是什么
    Python3你还未get到的隐藏技能是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python3你还未get到的隐藏技能在 Python 3 推出后,人们开始逐步将...
    99+
    2023-06-02
  • Python 你可能从未听说过的五种隐藏技巧
    人生苦短,快学Python1. ... 对象没错,你没看错,就是 "..."在Python中 ... 代表着一个名为 Ellipsis 的对象。根据官方说明,它是一个特殊值,通常可以作为空函数的占位符,或是用于Numpy中的切片操作。如:d...
    99+
    2023-05-14
    代码 Python 技巧
  • jupyterNotebook提升使用体验的几个隐藏功能分别是什么
    本篇文章为大家展示了jupyterNotebook提升使用体验的几个隐藏功能分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Jupyter Notebook是一个交互式的、便于创建的、支持实...
    99+
    2023-06-04
  • 为什么 ASP、分布式、Bash 和 JavaScript 是未来编程领域的必备技能?
    随着科技的不断发展,编程领域也在不断地演变。越来越多的编程语言和技术不断涌现,其中 ASP、分布式、Bash 和 JavaScript 已经成为了必备的技能。本文将分别介绍这几种技能的重要性,并穿插演示代码,帮助读者更好地理解。 一、ASP...
    99+
    2023-08-26
    分布式 bash javascript
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作