关于Python,99%的人不知道

  • 时间:
  • 浏览:1
  • 来源:大发彩票快三—大发彩票app

枚举是另一有三个小 符号集合,每个符号都和唯一的变量对应。通过使用枚举,.我.我 都 能非要通过符号标识来比较各个成员,.我.我 都 还能非要对枚举三种进行迭代。

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

print(path.resolve())

if number == 1:

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

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

fib(40)

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

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

​ 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

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

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

fib_memoization(40)

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

​​​​​​​# Duration: 6.866458078125e-05s

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

head, *body, tail = range(5)

print(head, body, tail)

对任何三种编程语言来说,字符串处理是一项有点痛 要的内容,字符串处理往往是一点多多程序运行 的基础每项。机会人工处理字符串非常繁琐,.我.我 都 更希望用三种底部形态化的最好的土办法来处理它们。在 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)

if number == 1:

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

print(first, third)

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

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

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

from dataclasses import dataclass

​​​​​​​@dataclass

class Armor:

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

print(py)

print(filename)

print(cmds)

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

.我.我 都 能非要使用 lru_cache 来优化该运算。你是什么 优化极技术称为 memoization ,它还都可以 把执行时间从几秒缩减到几纳秒。

from functools import lru_cache

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

def fib_memoization(number: int) -> int:

if number == 0: 

类型提示 (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)

数据类(3.7+)

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

class Armor:

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