如果我有一个函数(在Python 2.5.2中),如:
def sample_func():
a = 78
b = range(5)
#c = a + b[2] - x
Run Code Online (Sandbox Code Playgroud)
我的问题是:
提前致谢.
编辑:
每个人都在要求用例.但这是一个奇怪的情况.(别怪我,我没有创造它).这是场景:
Gle*_*ard 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()
Run Code Online (Sandbox Code Playgroud)
这是一个黑客攻击,因为没有办法知道co.co_consts中的哪个常量是哪个; 这使用了一个标记值来计算出来.根据您是否可以足够约束您的用例,这可能就足够了.
我不确定你的用例是什么,但这可能会更好地作为一个班级.您可以定义__call__方法以使类的行为类似于函数.
例如:
>>> class sample_func(object):
... def __init__(self):
... self.a = 78
... self.b = range(5)
... def __call__(self):
... print self.a, self.b, self.x
...
>>> f = sample_func()
>>> print f.a
78
>>> f.x = 3
>>> f()
78 [0, 1, 2, 3, 4] 3
Run Code Online (Sandbox Code Playgroud)
(这是基于您的玩具示例,因此代码没有多大意义.如果您提供更多详细信息,我们可能会提供更好的建议)
| 归档时间: |
|
| 查看次数: |
11150 次 |
| 最近记录: |