[python] wildcard type
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 10.10.09 20:38
Оценка: 33 (8)
Разрабатывая тут один взрослый велосипед, попутно пришел к еще одному, трехколесному-детскому, но прикольному:

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'


и я, кстати, не уверен, что это велосипед

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: [python] wildcard type
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.10.09 09:16
Оценка: 9 (1) +1
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>
KV>_ = wildcard()
KV>


Прикольно, но

[_,42] != [42,_]
Re[2]: [python] wildcard type
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.10.09 11:20
Оценка:
Здравствуйте, lomeo, Вы писали:

L>
L>[_,42] != [42,_]
L>


Имеется в виду, что сравнение не симметрично. И если _ == 42, то уже 42 != _
А раз контракт для сравнения нарушен, то использование этого приёма становится опасным.
Re[3]: [python] wildcard type
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 13.10.09 16:21
Оценка:
Здравствуйте, 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



[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: [python] wildcard type
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 13.10.09 17:03
Оценка:
Здравствуйте, lomeo, Вы писали:

L>
L>[_,42] != [42,_]
L>

Все, дошло. Ты именно на неравенство проверял, так? Просто кроме __cmp__ надо значит и остальные операции сравнения реализовать.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: [python] wildcard type
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 14.10.09 09:30
Оценка: +1
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Все, дошло. Ты именно на неравенство проверял, так? Просто кроме __cmp__ надо значит и остальные операции сравнения реализовать.


Я ступил. Я пользовался ipython, а у него, видимо _ — значение последнего выражения или что ещё

Но я имел в виду совсем другое. Если мы сравниваем wildcard с экземпляром класса, в котором тоже реализован __cmp__, то операция сравнения сразу становится несимметричной
Re[4]: [python] wildcard type
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 14.10.09 10:14
Оценка:
Здравствуйте, 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 должен быть исключительно правым элементом, для корректности сравнения.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[5]: [python] wildcard type
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 14.10.09 13:23
Оценка:
Здравствуйте, 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, ну да фиг с ним.

Спасибо за прикольную идею!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.