Magic Python -> ch4
heapq是 Python 的一个标准模块,它提供了堆排序算法的实现。带
yield的函数是一个生成器,而不是一个函数了。这个生成器有一个函数就是next函数,next 就相当于“下一步”生成哪个数,这一次的 next 开始的地方是接着上一次的 next 停止的地方执行的。生成器中的 yield,可看做 “return” 。- 迭代器需要实现 
__iter__()和__next__()方法,通常通过类来实现。 - 生成器通过函数实现,使用 
yield关键字暂停函数执行并返回一个值。 
- 迭代器需要实现 
 使用
**可以解包字典,使用*可以解包列表 。|合并操作符常用于对 set、dict 取并集,但要 Python >= 3.9。字典解析式:
{k:v for d in [profile, ext_info] for k,v in d.items()}列表解析式:
[x for l in (list01, list02, list03) for x in l]条件语法糖:
<on_true> if <condition> else <on_false>Lambda 表达式(匿名函数):
lambda arguments: expression,如lambda x: x**2判断是否包含子串:
"llo" in "hello, python"、"hello, python".find("llo") != -1、"hello, python".__contains__("llo")、operator.contains("hello, python", "llo")、re.findall(sub_str, full_str)海象运算符,很像 Golang 的短变量声明:
while (line := file.readline()): print(line.strip()),在推导式中也能用,[bmi for m in members if (bmi := get_bmi(m)) > 24]装饰器:本质上是一个函数,返回值也是函数。让其他函数在不需要做任何代码变动的前提下增加额外功能,常用于切面需求,如插入日志、性能测试、事务处理、缓存、权限校验等场景,从而可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
偏函数:也叫部分应用。是指在计算机科学中,固定多元函数的部分参数,并返回一个可以接受剩余部分参数的函数的转换过程。
动态执行函数:使用
eval(函数名的字符串)()来执行函数。若把所有的函数是放在类中,并定义成静态方法,那就不需要用 eval 了,接着使用getattr去获取并调用。
## 生成器
def foo():
    print("starting...")
    while True:
        res = yield 4
        print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(g.send(7))
## result
starting...
4
********************
res: 7
4
## 装饰器
# 这是装饰器函数,参数 func 是被装饰的函数
def logger(func):
    def wrapper(*args, **kw):
        print('我准备开始执行:{} 函数了:'.format(func.__name__))
        # 真正执行的是这行。
        func(*args, **kw)
        print('主人,我执行完啦。')
    return wrapper
## 带参数的函数装饰器
def say_hello(country):
    def wrapper(func):
        def deco(*args, **kwargs):
            if country == "China":
                print("你好!")
            elif country == "America":
                print('hello.')
            else:
                return
            # 真正执行函数的地方
            func(*args, **kwargs)
        return deco
    return wrapper
## 偏函数
from functools import partial
power_2=partial(power, n=2)
power_2(2)  # output: 4