Handy 发表了一个小记 《2025-05-09》
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
Handy 发表了一个小记 《你最宝贵的筹码》
战国时代_姜汁汽水:川普的对华策略

海权、产业链、货币

孔令金:加班不是员工的义务,只是一种选择;不要为了给别人挣钱拼搏别人的事业,而牺牲自己最宝贵的筹码(身体健康+可支配时间)

你的时间有多少用于休息、运动、娱乐、社交、提升?当工作时间过长,挤压了你的可支配时间,你会怎样?当你必须出卖健康和时间的时候,你可以选择卖给自己,成败都看个人能力,谁也怪不着。

努力工作真的有用的话,那么世界首富应该是毛驴或骡子。

西江月·梅花 by 苏轼

玉骨那愁瘴雾,冰姿自有仙风。

海仙时遣探芳丛,倒挂绿毛么凤。(么 同:幺)

素面翻嫌粉涴,洗妆不褪唇红。(翻嫌 一作:常嫌)

高情已逐晓云空,不与梨花同梦。

Handy 发表了一个小记 《AVL 树的旋转》

AVL 树所谓的旋转其实是针对 Root 来说的,双旋可分成两次单旋来看。四种情况:

  • 左子树插入左儿子导致失衡:右旋
  • 右子树插入右儿子导致失衡:左旋
  • 左子树插入右儿子导致失衡:先左旋后右旋
  • 右子树插入左儿子导致失衡:先右旋后左旋

从文字上看也是有规律的:单旋反方向,双旋同方向

Handy 发表了一个小记 《P 问题和 NP 问题》

P 和 NP 问题:想当初计算理论是真的没学太明白。

  • P(Polynominal)多项式时间解决的问题。规模 n 出现在底数的位置,如 O(1),O(logn),O(n) 等
  • NP(Non-deterministicPolynomial)非多项式时间解决的问题,能在多项式时间验证。规模 n 出现在顶部的位置,如 O(n!),O(2^n) 等
  • NPC(Complete)问题,首先是 NP 问题,然后所有 NP 问题都可以归约到它,归约就是把一个问题转化为另一个问题,这也就是说 NPC 问题是 NP 问题中最难的
  • NP-Hard 问题,首先所有 NP 问题都可以约化到它,然后它不一定是 NP 问题,也就是描述了一种类至少和 NP 中最难的问题一样难的问题,且这个问题不一定是 NP 问题
Handy 发表了一个小记 《docker 镜像代理》

镜像总是拉不下来,需要一个镜像代理,比较常见的有:

  1. ghcr.io 换成 ghcr.nju.edu.cn
  2. docker.io(一般没前缀) 换成 docker.1ms.run