47

我是python的初学者。我无法理解问题是什么?

def list_benefits():

        s1 = "More organized code"
        s2 = "More readable code"
        s3 = "Easier code reuse"
        s4 = "Allowing programmers to share and connect code together"
        return s1,s2,s3,s4

def build_sentence():

        obj=list_benefits()
        print obj.s1 + " is a benefit of functions!"
        print obj.s2 + " is a benefit of functions!"
        print obj.s3 + " is a benefit of functions!"

print build_sentence()

我得到的错误是:

Traceback (most recent call last):
   Line 15, in <module>
   print build_sentence()
   Line 11, in build_sentence
   print obj.s1 + " is a benefit of functions!"
AttributeError: 'tuple' object has no attribute 's1'
4

5 回答 5

41

您返回四个变量 s1,s2,s3,s4 并使用单个变量接收它们obj。这就是所谓的 a tupleobj与 4 个值相关联,即 的值s1,s2,s3,s4。因此,使用您在列表中使用的索引来按顺序获取您想要的值。

obj=list_benefits()
print obj[0] + " is a benefit of functions!"
print obj[1] + " is a benefit of functions!"
print obj[2] + " is a benefit of functions!"
print obj[3] + " is a benefit of functions!"
于 2013-06-25T06:02:20.040 回答
10

你正在返回一个tuple. 索引它。

obj=list_benefits()
print obj[0] + " is a benefit of functions!"
print obj[1] + " is a benefit of functions!"
print obj[2] + " is a benefit of functions!"
于 2013-06-25T05:59:11.920 回答
5

变量名称仅在本地有意义。

一旦你打

return s1,s2,s3,s4

在方法结束时,Python 构造一个元组,其中 s1、s2、s3 和 s4 的值作为索引 0、1、2 和 3 处的四个成员 - 不是变量名到值的字典,不是具有变量的对象名称及其值等。

如果您希望变量名称在您点击return方法后有意义,您必须创建一个对象或字典。

于 2013-06-25T06:00:16.783 回答
5
class list_benefits(object):
    def __init__(self):
        self.s1 = "More organized code"
        self.s2 = "More readable code"
        self.s3 = "Easier code reuse"

def build_sentence():
        obj=list_benefits()
        print obj.s1 + " is a benefit of functions!"
        print obj.s2 + " is a benefit of functions!"
        print obj.s3 + " is a benefit of functions!"

print build_sentence()

我知道这是迟到的答案,也许其他人可以受益如果您仍然想通过“属性”调用,您可以使用带有默认构造函数的类,并创建其他答案中提到的类的实例

于 2018-02-21T21:11:37.233 回答
1

我在 python 烧瓶中工作:我遇到了同样的问题......在我声明我的表单变量之后有一个“,”;我正在使用 wtforms。这就是造成所有混乱的原因

于 2020-05-05T03:41:25.230 回答