今天看transformer代码,看到了两个没用过的python语法糖,这里做一下记录
class MyDataSet():
def __init__(self, input):
super(MyDataSet, self).__init__()
self.input = input
def __len__(self):
return len(self.input)
def __getitem__(self, idx):
print('被调用')
return self.input[idx]
a = MyDataSet([[1,2],[3,4]])
for i in range(len(a)):
print(a[i])
打印结果:
被调用
[1, 2]
被调用
[3, 4]
这里做一下说明,首先,代码中建立了一个实例类a,__len__的作用是使得a可以调用len(),
即len(a)。
__getitem__的作用是当我们调用a[]时,会返回输入键 对应的值,键这里指的是idx,可以随意命名,如果return的是 self.input,而不是代码中那样,则idx随便输入什么,只要是a[]这种查询字典的格式,都会返回input。