Handy 发表了一个小记
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
comments powered by Disqus