关于OR运算符如何在python中工作的困惑

0 python types if-statement

我试图看看我的参数(称为'n')是一个整数还是浮点数,如果它是一个整数或浮点数,则返回n的绝对值.

if type(n) == int or type(n) ==float:
   return abs(n)
else: 
   return "blahblah"
Run Code Online (Sandbox Code Playgroud)

if type(n) == (int or float):
   return abs(n)
else:
   return "blahblah"
Run Code Online (Sandbox Code Playgroud)

第二块产生了与我预期不同的东西.它在做什么?

And*_*ark 5

(int or float)将评估int因为或运算符如何在Python中工作,所以type(n) == (int or float)相当于type(n) == int.所以基本上第一个版本是检查类型nint或者float,而第二个版本只是检查它是否是一个int(以极其混乱的方式).

请注意,这些方法都不是正确的方法,以下是更好的方法:

if isinstance(n, (int, float)):
    return abs(n)
else: 
    return "blahblah"
Run Code Online (Sandbox Code Playgroud)

或使用EAFP方法:

try:
    return abs(n)
except Exception:
    return "blahblah"
Run Code Online (Sandbox Code Playgroud)

作为旁注,重构的一般方法x == a or x == b是使用x in (a, b).所以在这种情况下你也可以使用if type(n) in (int, float),但在这种情况下使用isinstance()是更好的,因为它也可以正常使用int或的子类float.