在 Python 中的函数参数 (isinstance) 中使用运算符时出错
Error in using operators in function arguments (isinstance) in Python
我似乎无法理解这个函数的输出:
def is_integer(num1, num2):
if isinstance(num1 and num2, int):
return 'Yes'
else:
return 'No'
print(is_integer(1.4, 2))
这将输出 'Yes',但它不应该是因为 1.4 和 2 不是整数。
有帮助吗?
isinstance(num1 and num2, int)
与
相同
t1 = num1 and num2
if isinstance(t1, int)
and 在两个数字之间的结果 return 是第一个 Falsy 值(如果有的话),否则 return 是表达式中的最后一个值。
一些示例:
In [24]: 1.4 and 2
Out[24]: 2
In [25]: 1.4 and 2 and 3
Out[25]: 3
In [26]: 1.4 and 0 and 2
Out[26]: 0
有关详细信息,请参阅 。
如果您想同时测试两者,则必须分别进行:
def is_integer(num1, num2):
if isinstance(num1, int) and isinstance(num2, int):
return 'Yes'
return 'No'
哪种写法更实用
def is_integer(num1, num2):
if all(isinstance(n, int) for n in (num1, num2)):
return 'Yes'
return 'No'
...使用 all
函数概括为超过 2 个参数。
更好的是,让您的函数接受可变数量的参数:
def is_integer(*args):
if all(isinstance(n, int) for n in args):
return 'Yes'
return 'No'
更好的是,return 布尔结果:
def is_integer(*args):
return all(isinstance(n, int) for n in args)
and
运算符在 Python 中的工作方式是:
The expression x and y
first evaluates x
; if x
is false, its value is returned; otherwise, y
is evaluated and the resulting value is returned.
在Python、None
、False
中,数字零、空集合为false;几乎所有其他内容都是正确的。1
因此,1.4 and 2
表示 2
,因为 1.4
不为零。
因此,isinstance(1.4 and 2, int)
表示 isinstance(2, int)
。
而 2
是一个 int
。
你可能想要的是:
if isinstance(num1, int) and isinstance(num2, int):
… 或:
if all(isinstance(num, int) for num in (num1, num2)):
1.为了避免混淆具体的 True
和 False
值以及更抽象的 true 和 false 值概念,大多数 Python 开发人员参考 None
/False
/zero/empty 为 "falsey" 而不是 "false",其他所有内容为 "truthy" 而不是 "true"。但是文档避免了这种可爱之处,我在这里引用文档。
我似乎无法理解这个函数的输出:
def is_integer(num1, num2):
if isinstance(num1 and num2, int):
return 'Yes'
else:
return 'No'
print(is_integer(1.4, 2))
这将输出 'Yes',但它不应该是因为 1.4 和 2 不是整数。 有帮助吗?
isinstance(num1 and num2, int)
与
相同t1 = num1 and num2
if isinstance(t1, int)
and 在两个数字之间的结果 return 是第一个 Falsy 值(如果有的话),否则 return 是表达式中的最后一个值。
一些示例:
In [24]: 1.4 and 2
Out[24]: 2
In [25]: 1.4 and 2 and 3
Out[25]: 3
In [26]: 1.4 and 0 and 2
Out[26]: 0
有关详细信息,请参阅
如果您想同时测试两者,则必须分别进行:
def is_integer(num1, num2):
if isinstance(num1, int) and isinstance(num2, int):
return 'Yes'
return 'No'
哪种写法更实用
def is_integer(num1, num2):
if all(isinstance(n, int) for n in (num1, num2)):
return 'Yes'
return 'No'
...使用 all
函数概括为超过 2 个参数。
更好的是,让您的函数接受可变数量的参数:
def is_integer(*args):
if all(isinstance(n, int) for n in args):
return 'Yes'
return 'No'
更好的是,return 布尔结果:
def is_integer(*args):
return all(isinstance(n, int) for n in args)
and
运算符在 Python 中的工作方式是:
The expression
x and y
first evaluatesx
; ifx
is false, its value is returned; otherwise,y
is evaluated and the resulting value is returned.
在Python、None
、False
中,数字零、空集合为false;几乎所有其他内容都是正确的。1
因此,1.4 and 2
表示 2
,因为 1.4
不为零。
因此,isinstance(1.4 and 2, int)
表示 isinstance(2, int)
。
而 2
是一个 int
。
你可能想要的是:
if isinstance(num1, int) and isinstance(num2, int):
… 或:
if all(isinstance(num, int) for num in (num1, num2)):
1.为了避免混淆具体的 True
和 False
值以及更抽象的 true 和 false 值概念,大多数 Python 开发人员参考 None
/False
/zero/empty 为 "falsey" 而不是 "false",其他所有内容为 "truthy" 而不是 "true"。但是文档避免了这种可爱之处,我在这里引用文档。