从 python 对象获取函数的输入
Getting inputs to a function from a python object
我有一个class。这个 class 有一个函数列表,要由不同的程序计算。
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() 将 return“5”或 check_number 对我的任何输入。
如果 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
我理解你的困惑,但是:
new_function = check_number(5)
正在调用该函数,new_function
变量被赋予函数的 return 值。
如果你有这个check_number
函数:
def check_number(input):
return input > 10
则returnFalse
,new_function
则False
。从不 <some_library.check_number object at 0x07B35B90>
.
如果你得到 <some_library.check_number object at 0x07B35B90>
那么你的 check_number()
函数是 return 其他东西。
您可以使用标准库 functools.partial,它会创建一个新的偏应用函数 *.
>>> 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
对象不是 function
实例,但它是一个可调用对象,从 duck 类型的角度来看它是一个函数。
可能有几种方法可以给这只猫剥皮。但我会首先观察到您没有将 python 函数对象 添加到 functions_to_evaluate
列表中,而是添加了评估 个函数。
您可以简单地将 function, args
中的 tuple
添加到列表中:
SomeClassInstace.functions_to_evaluate.append((check_number, 5))
然后你可以:
for f, args in SomeClassInstance.functions_to_evaluate:
print(args)
我有一个class。这个 class 有一个函数列表,要由不同的程序计算。
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() 将 return“5”或 check_number 对我的任何输入。
如果 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
我理解你的困惑,但是:
new_function = check_number(5)
正在调用该函数,new_function
变量被赋予函数的 return 值。
如果你有这个check_number
函数:
def check_number(input):
return input > 10
则returnFalse
,new_function
则False
。从不 <some_library.check_number object at 0x07B35B90>
.
如果你得到 <some_library.check_number object at 0x07B35B90>
那么你的 check_number()
函数是 return 其他东西。
您可以使用标准库 functools.partial,它会创建一个新的偏应用函数 *.
>>> 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
对象不是 function
实例,但它是一个可调用对象,从 duck 类型的角度来看它是一个函数。
可能有几种方法可以给这只猫剥皮。但我会首先观察到您没有将 python 函数对象 添加到 functions_to_evaluate
列表中,而是添加了评估 个函数。
您可以简单地将 function, args
中的 tuple
添加到列表中:
SomeClassInstace.functions_to_evaluate.append((check_number, 5))
然后你可以:
for f, args in SomeClassInstance.functions_to_evaluate:
print(args)