в чем разница между этими двумя строками кода: if not x == 'val': и if x != 'val':

ymoto

Новичок
Пользователь
Апр 24, 2020
24
1
3
в чем разница между этими двумя строками кода:

if not x == 'val':

и

if x != 'val':
 

vs2007

Пользователь
Пользователь
Май 24, 2020
16
5
3
Вообще-то это разные строки. Могут давать одинаковый результат, а могут и не давать.

Python:
class X():
    def __ne__(self, other):
        return False

def not_eq(x):
    print(not x == 'val')
    print(x != 'val')

# Могут давать
x = 1
not_eq(x)

# А могут и не давать
x = X()
not_eq(x)

Но если переменная x ссылается на встроенные типы Python, Ваши строки эквивалентны.
Просто операторы проверки равенства/неравенства == != вызывают методы классов __eq__ и __ne__, которые могут быть переопределены, в этом случае результаты проверки не гарантируются.
 
Последнее редактирование:

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Python:
x = 'val'

if len(x): # Boolean True
    print('true', len(x)) # if выполняется
>>>('true', 3)

if not len(x): # Boolean NOT
    print('not', len(x)) # if не выполняется
>>>

Ну то есть перед тем как что-то делать с данными не мешало бы проверить на их наличие
 
Последнее редактирование:

Форум IT Специалистов