此代码的目的是"编写一个函数/ 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)
答案 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
}
});
}