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

关于OR运算符在python中如何工作的困惑,python,if-statement,types,Python,If Statement,Types,我试图查看我的参数(称为“n”)是整数还是浮点,如果是整数或浮点,则返回n的绝对值 if type(n) == int or type(n) ==float: return abs(n) else: return "blahblah" 对 if type(n) == (int or float): return abs(n) else: return "blahblah" 第二个区块产生的结果与我预期的不同。它在做什么?(int或float)将计算为int,因为它在

我试图查看我的参数(称为“n”)是整数还是浮点,如果是整数或浮点,则返回n的绝对值

if type(n) == int or type(n) ==float:
   return abs(n)
else: 
   return "blahblah"

if type(n) == (int or float):
   return abs(n)
else:
   return "blahblah"
第二个区块产生的结果与我预期的不同。它在做什么?

(int或float)
将计算为
int
,因为它在Python中是如何工作的,所以
类型(n)==(int或float)
相当于
类型(n)==int
。因此,基本上第一个版本是检查
n
的类型是
int
还是
float
,而第二个版本只是检查它是否是
int
(以一种极其混乱的方式)

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

if isinstance(n, (int, float)):
    return abs(n)
else: 
    return "blahblah"
或使用一种方法:

try:
    return abs(n)
except Exception:
    return "blahblah"
作为旁注,重构
x==a或x==b的一般方法是在(a,b)
中使用
x。因此,在本例中,如果在(int,float)
中键入(n),您也可以使用
,但在本例中,使用
isinstance()
更好,因为它还可以与
int
float

(int或float)
的子类一起正常工作,因此
类型(n)==(int或float)
相当于
类型(n)=int
。因此,基本上第一个版本是检查
n
的类型是
int
还是
float
,而第二个版本只是检查它是否是
int
(以一种极其混乱的方式)

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

if isinstance(n, (int, float)):
    return abs(n)
else: 
    return "blahblah"
或使用一种方法:

try:
    return abs(n)
except Exception:
    return "blahblah"

作为旁注,重构
x==a或x==b的一般方法是在(a,b)
中使用
x。因此,在本例中,如果在(int,float)中键入(n)
,也可以使用
,但在本例中使用
isinstance()
更好,因为它还可以与
int
float
的子类一起正常工作return必须位于以def函数开头的函数中:

return必须位于以def函数开头的函数中:

Python的“and”和“or”操作将始终返回一个操作数,而不是真值

非常重要(快速)请阅读此处:

第5.1节和第5.2节都讨论了这一点

慢慢地说出来

type(n) == (int or float)
解释器必须做的第一件事是计算等式比较两侧的表达式:'='

如果“n”是3.1415,我们得到:

<type 'float'> == <type 'int'>
or运算符将尝试获取操作数的布尔表示形式,从LHS开始:

bool(int)  #yes, what is the boolean representation of the integer class?
嘿,它有一个-你猜对了

True
短路开始,or运算符返回操作数(参见上面的文档)

Python的“and”和“or”操作将始终返回其中一个操作数,而不是真值

非常重要(快速)请阅读此处:

第5.1节和第5.2节都讨论了这一点

慢慢地说出来

type(n) == (int or float)
解释器必须做的第一件事是计算等式比较两侧的表达式:'='

如果“n”是3.1415,我们得到:

<type 'float'> == <type 'int'>
or运算符将尝试获取操作数的布尔表示形式,从LHS开始:

bool(int)  #yes, what is the boolean representation of the integer class?
嘿,它有一个-你猜对了

True
短路开始,or运算符返回操作数(参见上面的文档)


什么错误?没有语法错误那里“int或float”总是返回“int”什么错误?没有语法错误,“int或float”将始终返回“int”,谢谢F.J!我试过使用if,在其中也可以使用!如果在[int,float]中键入(n):但是感谢tip@Mei如果答案能解决你的问题,别忘了接受。它将帮助其他用户知道这个问题已经解决。谢谢F.J!我试过使用if,在其中也可以使用!如果在[int,float]中键入(n):但是感谢tip@Mei如果答案能解决你的问题,别忘了接受。它将帮助其他用户知道此问题已解决。有一个内置类型具有“False”布尔表示。你能猜出它是什么吗?有一个内置类型具有“False”布尔表示。你能猜出它是什么吗?如果所有美国人都是程序员,英语语法就是这样工作的。如果所有美国人都是程序员,英语语法就是这样工作的。