gpt4 book ai didi

python - 我们如何在不使用 `def` 关键字的情况下定义函数?

转载 作者:行者123 更新时间:2023-12-05 02:16:32 25 4
gpt4 key购买 nike

可以不使用 class 关键字来定义类。
以下...

get_i = lambda self: self.i    
get_i.__name__ = 'get_i'
get_i.__qualname__ = 'Klass2.get_i'
dct = dict(a=1, i=4, get_i=get_i)
Klass2 = type('Klass2', (SuperK,), dct)

...产生与以下相同的最终结果:

class Klass1(SuperK):
a = 1
i = 4
def get_i(self):
return self.i

我们如何为函数做类似的事情?也就是说,我们如何在不使用 deflambda 关键字的情况下定义函数?如果以下两段代码创建相同的 foodehf 的纯 Python 实现会是什么样子?

def foo(bar):
bar += 934
return bar

foo = dehf(blah, blah, blah, blah, [...])

最佳答案

您可以通过调用 types.FunctionType 创建函数构造函数。但是请记住,此构造函数未记录且特定于实现。在 CPython 中,我们可以通过调用 help(types.FunctionType) 来找出构造函数参数:

class function(object)
| function(code, globals[, name[, argdefs[, closure]]])
|
| Create a function object from a code object and a dictionary.
| The optional name string overrides the name from the code object.
| The optional argdefs tuple specifies the default argument values.
| The optional closure tuple supplies the bindings for free variables.

要创建一个代码对象,我们可以使用compile :

code = compile('print(5)', 'foo.py', 'exec')
function = types.FunctionType(code, globals())

function() # output: 5

关于python - 我们如何在不使用 `def` 关键字的情况下定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com