Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: False vs 0

In PHP you use the === notation to test for TRUE or FALSE distinct from 1 or 0.

For example if FALSE == 0 returns TRUE, if FALSE === 0 returns FALSE. So when doing string searches in base 0 if the position of the substring in question is right at the beginning you get 0 which PHP can distinguish from FALSE.

Is there a means of doing this in Python?

like image 330
Gabe Spradlin Avatar asked Dec 11 '14 19:12

Gabe Spradlin


2 Answers

In Python,

  • The is operator tests for identity (False is False, 0 is not False).

  • The == operator which tests for logical equality (and thus 0 == False).

Technically neither of these is exactly equivalent to PHP's ===, which compares logical equality and type - in Python, that'd be a == b and type(a) is type(b).

Some other differences between is and ==:

Mutable type literals

  • {} == {}, but {} is not {} (and the same holds true for lists and other mutable types)
  • However, if a = {}, then a is a (because in this case it's a reference to the same instance)

Strings

  • "a"*255 is not "a"*255", but "a"*20 is "a"*20 in most implementations, due to how Python handles string interning. This behavior isn't guaranteed, though, and you probably shouldn't be using is in this case. "a"*255 == "a"*255 and is almost always the right comparison to use.

Numbers

  • 12345 is 12345 but 12345 is not 12345 + 1 - 1 in most implementations, similarly. You pretty much always want to use equality for these cases.
like image 88
Amber Avatar answered Oct 30 '22 22:10

Amber


if something is False:

is what you should do

if something is None:

also works

the moral is use is ... (although you should never do something is 123457, or simillar)

for why you should never do this with ints and things see http://ideone.com/iKmWCn

like image 42
Joran Beasley Avatar answered Oct 30 '22 21:10

Joran Beasley