关于Python,99%的人不知道

  • 时间:
  • 浏览:1
  • 来源:uu快3官方网站_uu快3苹果版_走势

什儿 人儿能否否使用 lru_cache 来优化该运算。什儿 优化极技术称为 memoization ,它能否把执行时间从几秒缩减到几纳秒。

from functools import lru_cache

​​​​​​​@lru_cache(maxsize=512)

def fib_memoization(number: int) -> int:

if number == 0: 

数据类(3.7+)

Python 3 引入了数据类 (data class)。其装饰器会自动生成底部形态办法,这类 __init__() 和 __repr()__,这能否帮助减少样本代码的数量。在官方文档中,它们被称作 “具有默认值的可变命名元组” 。

class Armor:

print(path.resolve())

​​​​​​​first, , third, * = range(10)

print(first, third)

​​​​​​​py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()

print(py)

print(filename)

print(cmds)

类型提示 (3.5+)

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

def sentence_has_animal(sentence: str) -> bool:

return "animal" in sentence

sentence_has_animal("Donald had a farm without animals")

​枚举 (3.4+)

Python 3 中的 Enum 类支持枚举功能,能否否使什儿 人儿的多多线程 运行变得更加简洁。 Enum 是五种便捷的变量列表的打包办法,使用该办法能否解决多个变量在代码各处分布,使代码显得杂乱无章。

from enum import Enum, auto

​​​​​​​class Monster(Enum):

ZOMBIE = auto()

WARRIOR = auto()

BEAR = auto()

​​​​​​​print(Monster.ZOMBIE)

​​​​​​​path = root / 'happy_user'

python在近几年得到飞速发展,诞生了什儿 代码库。有时候小编发现有过多过多代码都未能使用到 Python 3 提供的新功能。本文作者介绍了相关功能的介绍,包括字符串格式化解决、文件路径解决、类型提示、内置 LRU 缓存等等,帮助什儿 人儿更好地利用 Python 3 书写代码。

枚举是一兩个多 符号集合,每个符号都和唯一的变量对应。通过使用枚举,什儿 人儿能否否通过符号标识来比较各个成员,什儿 人儿还能否否对枚举五种进行迭代。

https://docs.python.org/3/library/enum.htmlfor monster in Monster:

对任何五种编程语言来说,字符串解决是一项有点要的内容,字符串解决往往是过多过多多多线程 运行的基础主次。不可能 人工解决字符串非常繁琐,什儿 人儿更希望用五种底部形态化的办法来解决它们。在 Python 中,什儿 人儿一般使用 format 来进行底部形态化字符串解决,如下所示:

user = "Jane Doe" action = "buy"

​​​​​​​log_message = 'User {} has logged in and did an action {}.'.format( user, action )

除了 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}.'

Pathlib (3.4+)

不可能 能否否解决文件路径,什儿 人儿能否否使用 Python 3 中的 pathlib 库,使对文件路径的操作更加便捷。不可能 你对 pathlib 居于疑惑,能否否参考这篇文章。下面提供了一兩个多 代码示例:

from pathlib import Path

​​​​​​​root = Path('post_sub_folder')

print(root)

​​​​​​​return fib(number-1) + fib(number-2)

​​​​​​​start = time.time()

fib(40)

print(f'Duration: {time.time() - start}s')

​​​​​​​ def power(self) -> float:

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

​​​​​ print(armor)# <__main__.Armor object at 0x7fc430e2cf8>

接来下什儿 人儿使用数据类来实现里边的代码:

from dataclasses import dataclass

​​​​​​​@dataclass

class Armor:

​ armor = Armor(5.2, "Common armor.", 2)

armor.power()# 10.

​​print(armor)# Armor(armor=5.2, description='Common armor.', level=2

隐式命名空间包(3.3+)

构建Python代码有过多过多办法,其中五种过多过多在包(packages)中进行构建(即带有一兩个多 __init__.py 文件的文件夹)。

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 包变成一兩个多 本地的命名空间包,这不可能 产生什儿 额外的限制,具体能否否参考这篇文档。

文中的代码链接:

https://github.com/Weenkus/DataWhatNow-Codes/blob/master/things_you_are_probably_not_using_in_python_3_but_should/python%203%20examples.ipynb

if number == 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.866453078125e-05s

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

head, *body, tail = range(5)

print(head, body, tail)

if number == 1: