Разница в Python между is и equals (==)
Оператор is может выглядеть так же, как оператор равенства, но они не одинаковы.
is проверяет, указывают ли обе переменные на один и тот же объект, тогда как знак == проверяет, совпадают ли значения двух переменных.
Таким образом, если оператор is возвращает True, тогда равенство определенно True, но обратное может быть или не быть True.
Вот пример, чтобы продемонстрировать сходство и различие.
>>> a = b = [1,2,3]
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True
>>> a is b
True
>>> a is c
False
>>> a = [1,2,3]
>>> b = [1,2]
>>> a == b
False
>>> a is b
False
>>> del a[2]
>>> a == b
True
>>> a is b
False
Tip: Avoid using is operator for immutable types such as strings and numbers, the result is unpredictable.
Соответствие комментариям в стиле C в Lex / Flex или что-то еще, что хорошо задокументировано:
в документации , а также различные варианты в Интернете.
Вот пример вариант того, что можно найти в документации Flex:
<INITIAL>{
"//" BEGIN(IN_COMMENT);
}
<IN_COMMENT>{
\n BEGIN(INITIAL);
[^\n]+ // eat comment
"/" // eat the lone /
}
Попробуйте добавить "+" после правила [^ n]. Я не знаю, почему исключительное состояние по-прежнему принимает '==' даже в исключительном состоянии, но, по-видимому, это так. Flex обычно соответствует правилу, которое соответствует наибольшему количеству текста, и добавление «+», по крайней мере, сделает два правила связанными по длине. Если поставить правило КОММЕНТАРИЙ на первое место, оно будет использоваться в случае ничьей.
Подсказка:
Проблема в том, что "есть комментарий" правило, похоже, не сопоставляет токены с более одного символа
, поэтому добавьте *, чтобы сопоставить ноль или более символов без новой строки. Вы хотите Zero, иначе пустой комментарий не будет совпадать.
%x COMMENT
// { BEGIN(COMMENT); }
<COMMENT>[^\n]* ;
<COMMENT>\n { BEGIN(INITIAL); }
"==" { return EQUALEQUAL; }
. ;