Разрабатывая тут один взрослый велосипед, попутно пришел к еще одному, трехколесному-детскому, но прикольному:
class wildcard:
def __cmp__(self, other):
return 0
использовать, например, так:
a = [('string1', 2, 3.14), (4, 'string2', 2.7)]
_ = wildcard()
if a == [(_, 2, _), (4, 'string2', _)] :
print 'equal'
else:
print 'not equal'
и я, кстати, не уверен, что это велосипед
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>KV>_ = wildcard()
KV>
Прикольно, но
[_,42] != [42,_]
Здравствуйте, lomeo, Вы писали:
L>L>[_,42] != [42,_]
L>
Имеется в виду, что сравнение не симметрично. И если _ == 42, то уже 42 != _
А раз контракт для сравнения нарушен, то использование этого приёма становится опасным.
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, lomeo, Вы писали:
L>>L>>[_,42] != [42,_]
L>>
L>Имеется в виду, что сравнение не симметрично. И если _ == 42, то уже 42 != _
L>А раз контракт для сравнения нарушен, то использование этого приёма становится опасным.
class wildcard:
def __cmp__(self, other):
return 0
_=wildcard()
print 'equal' if [42,_] == [_,42] else 'not equal'
equal
Здравствуйте, lomeo, Вы писали:
L>L>[_,42] != [42,_]
L>
Все, дошло. Ты именно на неравенство проверял, так? Просто кроме __cmp__ надо значит и остальные операции сравнения реализовать.
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>Все, дошло. Ты именно на неравенство проверял, так? Просто кроме __cmp__ надо значит и остальные операции сравнения реализовать.
Я ступил. Я пользовался ipython, а у него, видимо _ — значение последнего выражения или что ещё
Но я имел в виду совсем другое. Если мы сравниваем wildcard с экземпляром класса, в котором тоже реализован __cmp__, то операция сравнения сразу становится несимметричной
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, kochetkov.vladimir, Вы писали:
KV>>Все, дошло. Ты именно на неравенство проверял, так? Просто кроме __cmp__ надо значит и остальные операции сравнения реализовать.
L>Я ступил. Я пользовался ipython, а у него, видимо _ — значение последнего выражения или что ещё
Да вроде нет
L>Но я имел в виду совсем другое. Если мы сравниваем wildcard с экземпляром класса, в котором тоже реализован __cmp__, то операция сравнения сразу становится несимметричной
Да, есть такое дело:
class wildcard1:
def __cmp__(self, other): return True
class wildcard2:
def __cmp__(self, other): return False
_1 = wildcard1()
_2 = wildcard2()
>>>
_1==_2 = False
_2==_1 = True
_1!=_2 = True
_2!=_1 = False
Т.е. труъ-wildcard должен быть исключительно правым элементом, для корректности сравнения.
Здравствуйте, kochetkov.vladimir, Вы писали:
L>>Я ступил. Я пользовался ipython, а у него, видимо _ — значение последнего выражения или что ещё
KV>Да вроде нет
У меня [_,42] == [42,_] сначала даёт False, а потом True
Проверяю, оказывается, что _ у меня False
The following GLOBAL variables always exist (so don't overwrite them!):
_ (one underscore): previous output.
__ (two underscores): next previous.
___ (three underscores): next-next previous.
Совершенно непонятно, почему False, если предыдущий output — True, ну да фиг с ним.
Спасибо за прикольную идею!