【发布时间】:2017-03-12 10:56:04
【问题描述】:
我知道大多数时候不推荐 exec 和 eval,但我想动态创建一个具有可变数量语句的函数。我想这样做的原因是因为每个带有 1 个语句的 3 个函数的性能都比一个带有 3 个语句的 1 个函数的性能差。
基本上我有一些对象,会从输入中读取字段和对象。
对于数量可变的 obj,我想为它们组装一个函数,而不是创建许多手动函数。有没有办法避免 (或者有没有办法生成make_funcN?)
def make_func1( obj1, field1, obj2, field2 ):
def copy():
obj1.__setattr__( field1, obj2.__getattribute__( field2 ) )
return copy
def make_func2( obj1, field1, obj2, field2, \
obj3, field3, obj4, field4 ):
def copy():
obj1.__setattr__( field1, obj2.__getattribute__( field2 ) )
obj3.__setattr__( field3, obj4.__getattribute__( field4 ) )
return copy
def make_func3( ... ):
...
谢谢,
【问题讨论】:
-
“用 1 个语句生成 3 个函数,每个函数的性能都比一个 1 个函数和 3 个语句的性能差”可能是一个真实的陈述。但是,除非您非常、非常频繁地使用此函数,否则性能差异不太可能产生影响——尤其是在与使用不支持本机宏的语言执行此操作所涉及的额外复杂性相平衡时。
-
是的,我非常频繁地使用这个功能......
-
那么,请确保您对替代方法进行基准测试。如果性能真的很重要,那么基于数据的优化要比猜测更快的方法要好得多。特别是当优化版本依赖于元编程并包含自己的函数调用时。
标签: python python-2.7 function