Skip to main content
 首页 » 编程设计

python之python 中的合成函数

2025年05月04日1152php

在 python 中,我可以创建一个没有类语句的类:

MyClass = type('X', (object,), dict(a=1)) 

有没有办法不用'def'创建一个函数? 据我所知...

d={} # func from string 
exec'''\ 
def synthetics(s): 
    return s*s+1 
''' in d 
 
>>> d.keys() 
['__builtins__', 'synthetics'] 
>>> d['synthetics'] 
<function synthetics at 0x00D09E70> 
>>> foo = d['synthetics'] 
>>> foo(1) 
2 

请您参考如下方法:

从技术上讲,是的,这是可能的。与所有其他类型一样,函数的类型是该类型实例的构造函数:

FunctionType = type(lambda: 0) 
help(FunctionType) 

正如您从帮助中看到的那样,您至少需要最少的代码和全局变量。前者是编译后的字节码对象;后者是字典。

要创建代码对象,可以使用代码类型的构造函数:

CodeType = type((lambda: 0).func_code) 
help(CodeType) 

帮助说这“不适合胆小的人”,这是真的。您需要将字节码和一堆其他东西传递给这个构造函数。因此,获取代码对象的最简单方法是从另一个函数获取,或者使用 compile() 函数。但是,如果您足够了解 Python 字节码, 技术上可以完全综合地生成代码对象。 (我已经在非常有限的基础上这样做,以构建用于装饰器的签名保留包装函数。)

PS -- FunctionType 和 CodeType 也可以通过 types 模块获得。