可能重复:
如何将参数传递给函数的 __code__?
我有一个代表函数的代码对象。当我调用exec
代码对象时,如何为输入参数指定一个值p
?
def x(p):
print p
code_obj = x.__code__
exec code_obj
#TypeError: x() takes exactly 1 argument (0 given)
可能重复:
如何将参数传递给函数的 __code__?
我有一个代表函数的代码对象。当我调用exec
代码对象时,如何为输入参数指定一个值p
?
def x(p):
print p
code_obj = x.__code__
exec code_obj
#TypeError: x() takes exactly 1 argument (0 given)
恢复重复的答案和评论:
import types
types.FunctionType(code_obj, globals={}, name='x')(1)
要使用方法,您可以使用函数类型或未绑定的方法,然后将实例作为第一个参数传递,或者将函数绑定到实例:
class A(object):
def __init__(self, name):
self.name = name
def f(self, param):
print self.name, param
# just pass an instance as first parameter to a function or to an unbound method
func = types.FunctionType(A.f.__code__, globals={}, name='f')
func(A('a'), 2)
unbound_method = types.MethodType(func, None, A)
unbound_method(A('b'), 3)
# or bound the function to an instance
bound_method = types.MethodType(func, A('c'), A)
bound_method(4)