Поведение ключевого слова "is" в python? - PullRequest
1 голос
/ 01 апреля 2020

Почему код ниже дает:

False
False
False

, а не: False True False

def foo(el):
    return (el is 0.0)

seq=[0,0.0,False]
for el in seq:
    print( foo(el) )

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Ключевое слово is в python используется для проверки, если две переменные ссылаются на один и тот же объект. Возвращает True, если две переменные ссылаются на один и тот же объект, в противном случае возвращается False.

В качестве примера рассмотрим class с именем A:

class A:
    pass

Случай 1:

x = A() #--> create instance of class A
y = A() #--> create instance of class A

>>> x is y
>>> False

Случай 2:

x = A() #--> create instance of class A
y = x #--> here y refers to the instance of x
>>> x is y
>>> True

В основном две переменные ссылаются на один и тот же объект, если они ссылаются на одну и ту же ячейку памяти. Вы можете проверить идентичность переменной с помощью встроенной функции в python, которая называется id(), эта функция возвращает идентификатор объекта (адрес объекта в памяти).

  • In Случай 1 id(x) не равен id(y), следовательно, x is y возвращает False.
  • В Случай 2 id(x) равен id(y), что означает, что и x, и y относятся к одному и тому же объекту в памяти , следовательно, x is y возвращает True.

Теперь перейдем к вашему вопросу,

def foo(el):
    return (el is 0.0)

В функции foo el is 0.0 возврат False потому что каждая из двух сущностей el и 0.0 относится к разным местам в памяти. Вы можете проверить этот факт, сравнив id(el) == id(0.0), который возвращает False.

0 голосов
/ 01 апреля 2020

Попробуйте:

def foo(el):
    return (el == 0.0)

seq=[0,0.0,False]
for el in seq:
    print(foo(el))

https://www.geeksforgeeks.org/difference-operator-python/

...