【发布时间】:2017-11-01 13:30:47
【问题描述】:
以计算数学函数的 Python 函数为例:
def func(x, a, b, c):
"""Return the value of the quadratic function, ax^2 + bx + c."""
return a*x**2 + b*x + c
假设我想以函数属性的形式“附加”一些进一步的信息。例如,LaTeX 表示。我知道感谢PEP232 我可以在函数定义之外执行此操作:
def func(x, a, b, c):
return a*x**2 + b*x + c
func.latex = r'$ax^2 + bx + c$'
但我想在函数定义本身内完成。如果我写
def func(x, a, b, c):
func.latex = r'$ax^2 + bx + c$'
return a*x**2 + b*x + c
这当然有效,但只有在我第一次调用func 之后(因为 Python 在执行函数时“懒惰”(?))
编写可调用类是我唯一的选择吗?
class MyFunction:
def __init__(self, func, latex):
self.func = func
self.latex = latex
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
func = MyFunction(lambda x,a,b,c: a*x**2+b*x+c, r'$ax^2 + bx + c$')
或者我忽略了语言的一个特性来巧妙地做到这一点?
【问题讨论】:
标签: python python-3.x function introspection