It's not often I come across something in Python that surprises me. Especially in something as mundane as string operations, but I guess Python still has a trick or two up its sleeve.
Have a look at this string:
>>> s = "A"
How many possible sub-strings are in s
? To put it another away, how many values of x
are there where the expression x in s
is true?
Turns out it is 2.
2?
Yes, 2.
>>> "A" in s
True
>>> "" in s
True
The empty string is in the string "A"
. In fact, it's in all the strings.
>>> "" in "foo"
True
>>> "" in ""
True
>>> "" in "here"
True
Turns out the empty string has been hiding every where in my code.
Not a complaint, I'm sure the rationale is completely sound. And it turned out to be quite useful. I had a couple of lines of code that looked something like this:
if character in ('', '\n'):
do_something(character)
In essence I wanted to know if character
was an empty string or a newline. But knowing the empty string thang, I can replace it with this:
if character in '\n':
do_something(character)
Which has exactly the same effect, but I suspect is a few nanoseconds faster.
Don't knock it. When you look after the nanoseconds, the microseconds look after themselves.