python 迭代器,魔方方法,isinstance

今天介绍点牛逼的(相对昨天而言)。
上午再看pytorch的Dataset、DataLoader、DataLoaderIter的相关博客,就是这篇很简单明了,然后我发现文章在介绍DataLoader的时候这样说:

DataLoader返回的是一个迭代器,我们通过这个迭代器来获取数据

我就奇怪,这个迭代器是个啥(毕竟本人学python时只看到了类,果然学习要坚持和深究)?
找了下这篇文章,简单来说,就是这样:老师让班里的每个同学做演讲,一天一个人,按学号来,比如说第一天是001来讲,那么第二天就应该是002.老师用来记住明天谁讲,那么老师就是一个迭代器。
我理解就是历遍列表的一种方式,我不用把整个数组放到内存,我想用下一个的时候直接用迭代器,不占用内存,感觉很优雅(个人愚见,有问题烦请指出!)。

插一句,这个文章里提到了:

import collection
a = isinstance(object, classinfo)
#object就是实例对象,classinfo就是类名或者基本类型
#这个函数和type是一个样子的,判断这个类是不是已知的类型

和这篇文章没大有关系,就是看的时候收集到的,姑且写在这。

到这里这篇文章本来应该结束了。但是!我在文章里看到作者一直说什么魔方方法、魔方方法我就很烦。那又是个啥?
然后我百度了一下魔方方法,然后:
在这里插入图片描述
你仿佛在逗我笑,搞点正经的啊百度!
然后关键词“python 魔方方法”,这次终于正常了。
然后就是各种奇奇怪怪的魔方方法总结大表格,一套一套的看着就晕。
然后我看到了这篇(嘿嘿)(感觉人家写的贼好),终于画风正常了。
我直接总结几点:

  1. 魔方方法都是前面后面都有双下划线的
  2. 魔方方法一般不会用 类.__魔方方法__这样的方式来调用,而是在特殊情况下才会被调用

这两特点是我自己乱总结的,为什么把这个写在这是因为联想到我昨天写的检查pytorch的Dataset是否正确,我突然意识到了!

pytorch在写自己的Dataset的时候一般是继承,然后重写__len__和__getitem__,那我们写的这个是啥呢?就是魔方方法啊!
我昨天写的我摘抄一点过来就是:

#为了清楚一点我把我重写的__getitem__贴在这,返回的是输入与输出两个数据
def __getitem__(self, item):
      input_img = load_img(self.input_filenames_list[item])
      target_img = load_img(self.target_filenames_list[item])
      if self.input_data_process:
          input_data = self.input_data_process(input_img)
      if self.target_data_process:
          target_data = self.target_data_process(target_img)
      return input_data, target_data
      
train_data = getting_train_data(args) #这里的train_data是我已经定义的我重写的Dataset类
img = train_data.__getitem__(0).[0]
# 这样赋值的是第0张图片的input
img = train_data[1][1]

但是下面这个语句也是同样的功能!我寻思这不就是魔方方法吗?我自己写的双下划线包围的魔方方法,不是直接的像是普通方法一样调用,而是有自己的调用方式,比如这里的__getitem__,就是用[]矩阵的形式调用的。
大概就这么点理解,能把这些串到一起感觉挺好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值