我正在尝试这段代码,希望在使用[::-1]
进行反转后返回一个文本字符串,但它无效。
class meh:
def __init__(self, bla):
self.bla = bla
def __reversed__(self):
return "Reversing!!!! %s" % self.bla[::-1]
a = meh("Reversed successfully!!!!")
print a[::-1]
如何正确调用__reverse__
函数?
示例:使用__gt__
调用> 25
,调用__reverse__
?
答案 0 :(得分:7)
[::-1]
是切片。 object.__reversed__()
使用reversed()
function,仅适用于序列(同时提供__len__
和__getitem__
方法的对象。< / p>
如果您不提供__reversed__
,则该函数会使用__len__
和__getitem__
方法反向访问索引。 __reversed__
必须自己返回一个迭代器:
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']
答案 1 :(得分:0)
从Python 2.4开始,列表确实具有reverse()
方法
r= list("asdfasdf")
r.reverse()
print(r)
print(''.join(r))
['f', 'd', 's', 'a', 'f', 'd', 's', 'a']
fdsafdsa