Python3特性

1. 格式化字符串f-strings(v3.6+)

user = "dream";
msg = f"User {user} is my name."

2. 路径管理库pathlib(v3.4+)

from pathlib import Path;

root = Path("root"); # 获取相对路径-> "root"

mPath = root / "user"; # 直接对路径的字符串进行/操作

absPath = mPath.resolve(); # 获取绝对路径

3. 类型提示Type hinting(3.5+)

def checkIsContain(container: str) -> bool:
    return "test" in container;

checkIsContain("My test string !"); # True

4. 枚举(3.4+)

  • 枚举是符号名称(成员)的集合,这些符号名称与唯一的常量值绑定在一起。
  • 在枚举中,可以通过表示对成员进行比较操作,而枚举本身也可以被遍历。
from enum import Enum, auto;

class Direction(Enum):
    TOP = auto()
    DOWN = auto()

for direction in Direction:
    print(direction);

5. 原生LRU(最近最少使用算法)缓存(3.2+)

  • 使用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);

6. 扩展的可迭代对象解包(3.0+)

first, *middle, last = tangr(5);
# first -> 0
# middle -> [1,2,3]
# last -> 4

py, filename, *cmds = "python main.py -m wxPython";
# py -> "python"
# filename -> "main.py"
# cmds -> ["-m", "wxPython"]

7. Data class装饰器(3.7+)

  • 用来减少对样板代码的使用【装饰器会自动生成诸如init()和repr()等特殊方法】。
from dataclass import dataclass

@dataclass
class User:
    name: str
    age: int = 1
    weight: float

    def value(self) -> float:
        return self.age * self.weight;

user = User("myName", 18, 60.2);
user.value();

8. 隐式命名空间包(3.3+)

  • python3中不必包含init.py文件。
  • 常规的程序包任然需要init.py,因为将它删除会把原本所在文件夹变成一个本地命名空间包,这会带来一些额外的限制。(详情参考本地命名空间包的官方文档)

results matching ""

    No results matching ""