请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

课下自主练习之迭代器问题

https://img1.sycdn.imooc.com//szimg/5ad48d9b00017b2c09180510.jpg

https://img1.sycdn.imooc.com//szimg/5ad48d9b000179a817501178.jpg

https://img1.sycdn.imooc.com//szimg/5ad48d9b0001d7b921181126.jpg

老师,我就弄不明白为什么在调用Book实例的description()方法的时候打印出来后面或多出个None?

正在回答 回答被采纳积分+3

2回答

提问者 吃小锅米线 2018-04-16 20:52:06

还是有个地方不太明白:为什么我在循环里打印book的类型,显示出来的却是<class 'iterator.Book'>https://img1.sycdn.imooc.com//szimg/5ad498dd00010c9309220524.jpg

为什么不直接是<class Book>呢?

就比如一个所有元素都是纯整形的一个数组a

a = [1,2,3,4,5,6]

通过map()函数把每个元素放大两倍,再循环遍历出来,print一下每个元素的类型,显示<class 'Int'>

也就是说新生成的列表里的每个元素的类型与原列表里每一个元素的类型是同一种类型。

但是我通过自定义迭代器BookCollection遍历出来的元素的类型却是<class 'iterator.Book'>呢?

我就想知道<class 'iterator.Book'>和<class Book>的区别在哪里?

0 回复 有任何疑惑可以回复我~
  • 哥们,我为了看懂你的代码又手打了一遍,结果看的还是蒙蒙的。说点个人看法哈请别介意,你这写法像是在炫技,结果把自己给绕晕了。比如那个mapper函数的作用究竟是要干什么,通过映射把res的数据一次性全部给Book的类变量赋值?这么奇怪的操作还不如直接实例化一个对象,然后通过循环把res中的每本书的数据依次赋给对象的实例变量(有点生成器的感觉),这样还能节省内存资源。
    Python之禅怎么说的?简洁胜于复杂。
    完全不需要BookCollection这个类,也不需要mapper映射。一个循环搞定:
    for i in res:
        book = Book()
        book.name = i['name']
        book.author = i['author']
        book.date_of_production = i['date']
        book.description()
    回复 有任何疑惑可以回复我~ 2018-06-11 20:12:26
  • 提问者 吃小锅米线 回复 陈年矿泉水 #2
    其实我是没有想到好的例子去练习,就用了这个简单的例子。对于mapper高阶函数的运用知识为了加深印象而已,没有别的意思。我也知道对象可以更清晰的处理。但是,好吧,不管怎么说,只是个练习而已,不必太在意。如果你有更好的实际的例子,那么就请你分享出来,咱们一起探讨学习。
    回复 有任何疑惑可以回复我~ 2018-06-13 00:15:29
提问者 吃小锅米线 2018-04-16 20:27:59

我知道了,低级错误,哈哈哈,本来book.description()实例方法就是调用print函数。结果我又在循环里又套了一层print函数。直接在循环里调用book.description()方法就行了。真是佩服我自己

0 回复 有任何疑惑可以回复我~
  • 7七月 #1
    学习好认真。。。自己多思考下就好了,不会有平白无故的错误。
    回复 有任何疑惑可以回复我~ 2018-04-16 21:22:00
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号