我有一个函数,它接受一个Books列表,并返回每个书的一个大字符串,后跟一个换行符。
Book = namedtuple('Book', 'author title genre year price instock')
Book('Suzane Collins','The Hunger Games', 'Fiction', 2008, 6.96, 20),
Book('J.K. Rowling', "Harry Potter and the Sorcerer's Stone", 'Fantasy', 1997, 4.78, 12)
我做了以下功能:
def Booklist_display(dlist):
for item in dlist:
return '{name} {price} {stock}'.format(name=item.name, price=item.price, stock=item.instock)
但它只打印第一本书,而不是第二本书。
Suzane Collins 6.96 20
有人可以帮我理解我的代码是否正确以及为什么我的功能只打印第一部分?我似乎无法确定逻辑。
答案 0 :(得分:2)
在此for
循环中:
for item in dlist:
return '{name} {price} {stock}'.format(name=item.name, price=item.price, stock=item.instock)
当循环遍历第一个对象时(由于return
),函数退出。
将结果存储在列表中并稍后返回:
strlist = []
for item in dlist:
strlist.append('{name} {price} {stock}'.format(name=item.name, price=item.price, stock=item.instock))
return '\n'.join(strlist)
答案 1 :(得分:1)
您可以将join
与列表理解结合使用。
from collections import named tuple
Book = namedtuple('Book', 'author title genre year price instock')
books = [Book('Suzane Collins','The Hunger Games', 'Fiction', 2008, 6.96, 20),
Book('J.K. Rowling', "Harry Potter and the Sorcerer's Stone", 'Fantasy', 1997, 4.78, 12)]
def Booklist_display(dlist):
return '\n'.join(['{title} {price} {stock}'
.format(title=item.title, price=item.price, stock=item.instock)
for item in dlist])
>>> Booklist_display(books)
"The Hunger Games 6.96 20\nHarry Potter and the Sorcerer's Stone 4.78 12"