关于自建类传递参数的bug如何修改?

在看Python贪婪算法的范例时,发现代码中使用Thing(*input_thing())不断实例化Thing类,这里想问一下,为什么这里实例化Thing类传递的参数要加星号啊?
在网上搜到星号的功能是“用来接受任意多个参数并将其放在一个元组中”。但是Thing类实例化的时候是接收三个参数,input_thing()函数返回的也是三个参数,不是应该直接Thing(input_thing())就可以吗?为什么还要用星号将其转化为一个元祖再传递给Thing类啊?
新手学习,可能大佬看起来问题比较傻,但是真的是想不明白了,麻烦各位大佬不吝赐教,谢谢。
以下是完整代码:

class Thing(object):
    def __init__(self,name,price,weight):
        self.name = name
        self.price = price
        self.weight = weight
    @property
    def value(self):
        return self.price / self.weight

def input_thing():
    name_str,price_str,weight_str = input().split()
    return name_str,int(price_str),int(weight_str)

def main():
    max_weight,num_of_things = map(int,input().split())
    all_things = []
    for _ in range(num_of_things):
        all_things.append(Thing(*input_thing()))
    total_weight = 0
    total_price = 0
    all_things.sort(key = lambda x:x.value,reverse=True)
    for thing in all_things:
        if total_weight + thing.weight <= max_weight:
            print('小偷偷走了%s'%(thing.name))
            total_weight += thing.weight
            total_price += thing.price
        print('总价值:%s美元'%(total_price))
    return
if __name__ == "__main__":
    main()
阅读 2.3k
1 个回答

函数返回值哪能是多个……返回值只能有一个。

image.png

你这返回的已经是一个元组了。

P.S. 你可能会误以为有括号的才是元组,事实上逗号才是必须的,括号并不是。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题