关于Python,99%的人不知道

  • 时间:
  • 浏览:0
  • 来源:大发5分快3APP下载_大发5分快3APP官方

类型提示 (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 类支持枚举功能,还可不还可以使亲戚朋友 的tcp连接变得更加简洁。 Enum 是一种便捷的变量列表的打包措施,使用该措施还可不还可以避免多个变量在代码各处分布,使代码显得杂乱无章。

from enum import Enum, auto

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

ZOMBIE = auto()

WARRIOR = auto()

BEAR = auto()

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

对任何一种编程语言来说,字符串避免是一项不得劲要的内容,字符串避免往往是全都tcp连接的基础次要。如果人工避免字符串非常繁琐,亲戚朋友 更希望用一种社会形态化的措施来避免它们。在 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)

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

print(first, third)

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

print(path.resolve())

if number == 1:

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

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

​​​​​​​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)

数据类(3.7+)

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

class Armor:

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

接来下亲戚朋友 使用数据类来实现后面 的代码:

from dataclasses import dataclass

​​​​​​​@dataclass

class Armor:

if number == 1:

枚举是另另三个白符号集合,每个符号都和唯一的变量对应。通过使用枚举,亲戚朋友 还可不还可以通过符号标识来比较各个成员,亲戚朋友 还还可不还可以对枚举一种进行迭代。

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

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

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

fib(40)

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

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

print(py)

print(filename)

print(cmds)

亲戚朋友 还可不还可以使用 lru_cache 来优化该运算。这一 优化极技术称为 memoization ,它还可不还可以把执行时间从几秒缩减到几纳秒。

from functools import lru_cache

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

def fib_memoization(number: int) -> int:

if number == 0: 

​ 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

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