Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以用代码动态填充Python方法吗?_Python_Reflection_Introspection - Fatal编程技术网

可以用代码动态填充Python方法吗?

可以用代码动态填充Python方法吗?,python,reflection,introspection,Python,Reflection,Introspection,我有以下几种格式的方法: def p_methodone(a): pass def p_methodtwo(a): pass ... 我想删除过程并用代码a[0]=a[1]填充这些方法。在Python中是否可以使用反射之类的东西动态地执行此操作?原因是我有很多这样的方法,代码a[0]=a[1]以后可能会更改-最好只在一个地方更改它(而不是执行搜索和替换) (注意:我不能以任何方式更改这些定义,因为外部库依赖于它们采用这种格式。)使用lambdas y = lambda a:

我有以下几种格式的方法:

def p_methodone(a):
    pass

def p_methodtwo(a):
    pass

...
我想删除
过程
并用代码
a[0]=a[1]
填充这些方法。在Python中是否可以使用反射之类的东西动态地执行此操作?原因是我有很多这样的方法,代码
a[0]=a[1]
以后可能会更改-最好只在一个地方更改它(而不是执行搜索和替换)

(注意:我不能以任何方式更改这些定义,因为外部库依赖于它们采用这种格式。)

使用lambdas

y = lambda a: a[0] = a[1]
y([1, 2, 3])

可以使用lambda函数或其他函数重写函数定义

>>> def newdef(a): return a+1
... 
>>> p_methodone = newdef
>>> p_methodone(10)
11

>>> def newdef(a): return a+2
... 
>>> p_methodone = newdef
>>> p_methodone(10)
12

是否有可能程序的其他部分已获得对您希望更改的函数的引用?如果是这样,在像sfk和Rustam建议的那样重新绑定名称后,这些部件仍将具有旧功能。演讲中提出了一个即使在这种情况下也应该有效的解决方案。它涉及到乱搞
\uuuuuuuuuuuuuuuuuuuuuuuu
属性。这当然只是学术上的兴趣,因为你不应该那样做。:)