Конкатенация с ключевым словом «in» дает ложные результаты - PullRequest
0 голосов
/ 23 февраля 2019

Может кто-нибудь объяснить, почему конкатенация строки и логического выражения (в результате использования ключевого слова in) вернет значение False, а не ошибку типа?

>>> var1 = "fish"

>>> var2 = "fi"

>>> print("True that " + var1 in var2) # str + bool returns False not TypeError
**False**

>>> print("True that ", var1 in var2) # str, bool works with comma method
True that  False

>>> print("True that " + var2 in var1) # str + bool returns False not TypeError
**False**

>>> print("True that ",var2 in var1) # stre , bool works with comma method
True that  True

>>> print(var2 in var1)
True

>>> type("True that ")
<class 'str'>

>>> type(var2 in var1)
<class 'bool'>

python code using concatenation with bool

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Оператор + имеет более высокий приоритет, чем оператор in, поэтому:

"True that " + var1 in var2

фактически

("True that " + var1) in var2

, что, следовательно, возвращает False с var1 будучи 'fish' и var2 являясь 'fi'.

Вы должны заключить var1 in var2 в скобки, если хотите, чтобы оператор + поднял TypeError:

"True that " + (var1 in var2)
0 голосов
/ 23 февраля 2019

Вы ошиблись своим приоритетом.a + b in c анализируется как (a + b) in c, а не a + (b in c).Конкатенация строк + bool не происходит.

...