从python对象获取函数的输入

时间:2018-10-17 16:17:10

标签: python function python-object

我上课。该类具有要由其他程序评估的功能的列表。

class SomeClass(object):
    def __init__(self, context):
        self.functions_to_evaluate = []

有一个函数可以通过以下方式将函数添加到SomeClass的实例中:

new_function = check_number(5)
SomeClassInstance.functions_to_evaluate.append(new_function)

假设check_number是一个函数,它将检查数字是否大于10。

如果我将SomeClassInstance.functions_to_evaluate并打印出来,我会得到一堆python对象,就像这样:

<some_library.check_number object at 0x07B35B90>

我想知道是否有可能提取给check_number的输入,所以像这样:

SomeClassInstance.functions_to_evaluate [0] .python_feature()将会返回“ 5”或任何给我的check_number输入。

4 个答案:

答案 0 :(得分:4)

您可以使用标准库functools.partial,该库创建一个新的部分应用的函数*。

if(GetComponent<YourComponent>.isDrag) // ....

*:实际上>>> from functools import partial >>> def check_number(input): ... return input > 10 >>> fn = partial(check_number, 5) >>> fn.args # this attribute gives you back the bound arguments, as a tuple. (5,) >>> fn() # calls the function with the bound arguments. False 对象不是partial实例,但它是可调用的,从鸭子类型的角度来看,它是一个函数。

答案 1 :(得分:1)

如果new_function = check_number(5)是闭包,则可以使用__closure__[0].cell_contents提取该值:

示例:

def foo(x):
    def inn(y):
        return x
    return inn

s = foo(5)
print(s.__closure__[0].cell_contents)

输出:

  

5

答案 2 :(得分:1)

我了解您的困惑,但是:

new_function = check_number(5)

正在调用该函数,并且为new_function变量分配了该函数的返回值

如果您具有此check_number功能:

def check_number(input):
    return input > 10

然后它将返回False,而new_function将是False。永远不要<some_library.check_number object at 0x07B35B90>

如果您获得<some_library.check_number object at 0x07B35B90>,则您的check_number()函数将返回其他内容。

答案 3 :(得分:1)

可能有几种方法可以给这只猫蒙皮。但是我首先要注意的是,您没有将{em> python函数对象添加到functions_to_evaluate列表中,而是添加了对 函数的评估。 / p>

您只需在列表中添加tuple中的function, args

SomeClassInstace.functions_to_evaluate.append((check_number, 5))

然后您可以:

for f, args in SomeClassInstance.functions_to_evaluate:
    print(args)