我正在尝试解决这个练习:
返回一个函数,该函数表示具有这些系数的多项式。
例如,如果
coefs=(10, 20, 30)
,返回x
计算 的函数30 * x**2 + 20 * x + 10
。还将 coefs 存储在.coefs
函数的属性上,并将公式的 str 存储在.__name__
属性上。
这是我的解决方案:
def poly(coefs):
#write the string name
l=len(coefs)
coefs=reversed(coefs)
j=0
name=""
for i in coefs:
if j<l-2:
name=name+str(i)+" * x**"+str(l-j-1)+" + "
elif j==l-2:
name=name+str(i)+" * x + "
else:
name=name+str(i)
j=j+1
def calc(x):
name.replace("x",str(x))
calc.__name__=name
return eval(name)
return calc
它不能很好地工作。
>>> p=poly((1,2,3))
>>> p
<function calc at 0x3b99938> #the name of p is not what I want!!! (*)
>>> y=p(3)
>>> p
<function 3 * x**2 + 2 * x + 1 at 0x3b99938> # now this is right!
>>>
我怎样才能在第一次通话中也有正确的名字 (*) ?