This method searches for the first group of word characters (ie: [a-zA-Z0-9_]
), returning the first matched group or None
in case of failure.
def test(str):
m = re.search(r'(\w+)', str)
if m:
return m.group(1)
return None
The same function can be rewritten as:
def test2(str):
m = re.search(r'(\w+)', str)
return m and m.group(1)
This works the same, and is documented behavior; as this page clearly states:
The expression
x and y
first evaluatesx
; ifx
is false, its value is returned; otherwise,y
is evaluated and the resulting value is returned.
However, being a boolean operator (it even says so on the manual), I expected and
to return a boolean. As a result, I was astonished when I found out (how) this worked.
What are other use cases of this, and/or what is the rationale for this rather unintuitive implementation?