For some reason this function confused me:
def protocol(port):
return port == "443" and "https://" or "http://"
Can somebody explain the order of what’s happening behind the scenes to make this work the way it does.
I understood it as this until I tried it:
Either A)
def protocol(port):
if port == "443":
if bool("https://"):
return True
elif bool("http://"):
return True
return False
Or B)
def protocol(port):
if port == "443":
return True + "https://"
else:
return True + "http://"
Is this some sort of special case in Python, or am I completely misunderstanding how statements work?
It’s an old-ish idiom; inserting parentheses to show priority,
x and yreturnsyifxis truish,xifxis falsish;a or b, vice versa, returnsaif it’s truish, otherwiseb.So if
port == "443"is true, this returns the RHS of theand, i.e.,"https://". Otherwise, theandis false, so theorgets into play and returns `”http://”, its RHS.In modern Python, a better way to do translate this old-ish idiom is: