我试图看看我的参数(称为'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)
第二块产生了与我预期不同的东西.它在做什么?
(int or float)将评估int因为或运算符如何在Python中工作,所以type(n) == (int or float)相当于type(n) == int.所以基本上第一个版本是检查类型n是int或者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.