def myFunc( a, b ):
def innerFunc( c ):
print c
innerFunc( 2 )
print a, b
如何直接访问内部函数?我想要该函数的对象/地址的格式
<function innerFunc at 0xa0d5fb4>
我尝试使用myFunc._ getattr _( 'innerFunc' )但这没有用。
def myFunc( a, b ):
def innerFunc( c ):
print c
innerFunc( 2 )
print a, b
如何直接访问内部函数?我想要该函数的对象/地址的格式
<function innerFunc at 0xa0d5fb4>
我尝试使用myFunc._ getattr _( 'innerFunc' )但这没有用。
由于该函数在函数调用之前不存在(并且仅在调用期间存在),因此您无法访问它。
如果闭包不重要,您可以直接从放置在外部函数内部的代码常量构建内部函数:
inner = types.FunctionType(myFunc.__code__.co_consts[1], globals())
函数的 const 值内的位置可能会有所不同......
此解决方案不需要调用myFunc
.
您可以做的是在调用时返回函数或将其附加到其父级...
>>> def myFunc( a, b ):
... def innerFunc( c ):
... print c
... innerFunc( 2 )
... myFunc.innerFunc = innerFunc
... print a, b
...
>>>
>>> myFunc(1,2)
2
1 2
>>> myFunc.innerFunc(3)
3
>>>
尽管显然您可以使用特殊属性访问源代码,但该函数对象具有... myFunc.func_code
尽管这似乎正在访问一些严肃的东西
>>> help(myFunc.func_code)
Help on code object:
class code(object)
| code(argcount, nlocals, stacksize, flags, codestring, constants, names,
| varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])
|
| Create a code object. Not for the faint of heart.
|
你不能。内部函数在外部函数被调用之前不存在,并且在外部函数退出时被decref'ed,在这种情况下意味着它不再存在。
您不能innerFunc
直接从 myFunc 外部调用,因为它位于myFunc
的命名空间内。调用 innerFunc 的一种方法是innerFunc
从myFunc
像这样:
def myFunc( a, b ):
def innerFunc( c ):
print c
print a, b
return innerFunc #return the innerFunc from here
x=myFunc(1,2)
x(3) # calling x now calls innerFunc