[::-1]
은 슬라이스입니다. object.__reversed__()
대신 reversed()
function에서 사용하고 시퀀스 (모두 __len__
과 __getitem__
방법.
당신이 __reversed__
제공하지 않는 경우는, 함수가 접근하는 __len__
및 __getitem__
방법을 사용하여 제공하는 객체에만 적용됩니다 .
class Reversable(object):
def __init__(self, seq):
self.seq = seq
def __len__(self):
return len(self.seq)
def __getitem__(self, item):
return self.seq[item]
def __reversed__(self):
for elem in 'Reversing: ' + self.seq[::-1]:
yield elem
데모 :
>>> class Reversable(object):
... def __init__(self, seq):
... self.seq = seq
... def __len__(self):
... return len(self.seq)
... def __getitem__(self, item):
... return self.seq[item]
... def __reversed__(self):
... for elem in 'Reversing: ' + self.seq[::-1]:
... yield elem
...
>>> r = Reversable('Foo bar baz!')
>>> list(r)
['F', 'o', 'o', ' ', 'b', 'a', 'r', ' ', 'b', 'a', 'z', '!']
>>> list(reversed(r))
['R', 'e', 'v', 'e', 'r', 's', 'i', 'n', 'g', ':', ' ', '!', 'z', 'a', 'b', ' ', 'r', 'a', 'b', ' ', 'o', 'o', 'F']
역
__reversed__
의 지수 자체는 반복자를 반환해야합니다
@KarolyHorvath : whoops. –
감사합니다. 응답이 유용했습니다. –