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");
mPath = root / "user";
absPath = mPath.resolve();
3. 类型提示Type hinting(3.5+)
def checkIsContain(container: str) -> bool:
return "test" in container;
checkIsContain("My test string !");
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);
py, filename, *cmds = "python main.py -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,因为将它删除会把原本所在文件夹变成一个本地命名空间包,这会带来一些额外的限制。(详情参考本地命名空间包的官方文档)