Glenn Maynar..
16
没有.没有运行的功能没有本地人; 它只是一个功能.询问如何在函数未运行时修改函数的本地函数,就像询问如何在程序未运行时修改程序的堆.
但是,如果你真的想要,你可以修改常量.
def func():
a = 10
print a
co = func.func_code
modified_consts = list(co.co_consts)
for idx, val in enumerate(modified_consts):
if modified_consts[idx] == 10: modified_consts[idx] = 15
modified_consts = tuple(modified_consts)
import types
modified_code = types.CodeType(co.co_argcount, co.co_nlocals, co.co_stacksize, co.co_flags, co.co_code, modified_consts, co.co_names, co.co_varnames, co.co_filename, co.co_name, co.co_firstlineno, co.co_lnotab)
modified_func = types.FunctionType(modified_code, func.func_globals)
# 15:
modified_func()
这是一个黑客攻击,因为没有办法知道co.co_consts中的哪个常量是哪个; 这使用了一个标记值来计算出来.根据您是否可以足够约束您的用例,这可能就足够了.