暗无天日

=============>DarkSun的个人博客

给Python中的函数换脑

https://lerner.co.il/2017/02/02/python-function-brain-transplants/ 上看到的,颇为有趣,记录一下。

python中函数对象有一个 __code__ 属性(它也是一个code对象)保存了函数定义中的实际代码。 通过它可以获取到一些该函数的元信息,比如 __code__.co_argcount 可以查看函数参数个数, __code__.co_code 可以查看函数的字节码。

虽然 __code__ 本身是一个只读对象,但是 function对象本身是可以修改的,所以如果我们可以将它的 .__code__ 属性替换掉。比如

def foo():
    return "foo"

def bar():
    return "bar"

# 开始换脑
bar.__code__ = foo.__code__
return bar()
foo