从3元组生成二次多项式

时间:2015-09-26 03:01:11

标签: python-2.7

此代码的目的是"编写一个函数/ sub gen_2nd_deg_polys,它获取3元组列表并返回匿名列表2 度多项式。"     它告诉我"功能" object没有 Getitem 属性。

我是否遗漏了在lambda中访问元组的重要事项?

readString()

已编辑...仍然非常错误

import sys

def gen_2nd_deg_polys(coeffs):
    return lambda x: (
    str(coeffs[0][0]) + 'x^2 + ' + str(coeffs[0][1]) + 'x + ' + str(coeffs[0][2]) + ' at x = ' + str(x), coeffs[0][0] * x ** 2 + coeffs[0][1] * x + coeffs[0][2])

polys = gen_2nd_deg_polys([(1, 2, 3), (4, 5, 6)])

polys[0](1)
polys[1](2)

1 个答案:

答案 0 :(得分:1)

您需要解决许多问题。首先,您的gen_2nd_deg_polys函数需要循环遍历元组列表并生成一个lambda对象,表示每个元素的多项式。它们可以在列表中返回,您可以将其编入索引(使用[])并调用(使用())。

一个微妙的观点是Python在lambda定义中“迟到”绑定变量引用(有关详细信息,请参阅e.g. here),因此这是一个简单的循环:

for pcoeffs in coeffs:
    plist.append(lambda x: pcoeffs[0] * x**2 + pcoeffs[1] * x + pcoeffs[2])

会导致您lambdas的所有pcoeffs使用coeffs中遇到的pcoeffs最后元组(因此所有多项式都是相同的)。解决此问题的一种方法(通常的AFAIK)是将def gen_2nd_deg_polys(coeffs): plist = [] for pcoeffs in coeffs: plist.append(lambda x, pcoeffs=pcoeffs: pcoeffs[0] * x**2 + pcoeffs[1] * x + pcoeffs[2]) return plist coeffs = [(1,2,3), (0,4,3), (1,5,-3)] polys = gen_2nd_deg_polys(coeffs) print polys[0](3), 1*9 + 2*3 + 3 print polys[1](3), 4*3+3 print polys[2](3), 1*9 + 5*3 - 3 设置为默认参数,如下所示:

 getUser();
 function getUser() {
   $scope.userList= ["user 1", "user 2", "user 3", "user 4", "user 5", "user 6"];
   $scope.Listobj= $scope.userList.map(function(user){
   return {
    userInfo: user,
    closable:true
   }
 });
}