gpt4 book ai didi

python isinstance(n, int) 和 int(n) == n

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:21 26 4
gpt4 key购买 nike

两个函数:

def check(n):
if int(n) != n:
print("int(n) != n")
else:
print("int(n) == n")

def check2(n):
if not isinstance(n, int):
print("n is not an int")
else:
print("n is an int")

有什么区别?哪个更好?

最佳答案

第二个确实有效(因为它不会在不可强制转换为 int 的东西上出错),但这实际上取决于您想要做什么。如果你在纯 Python 中工作,最好的办法是 duck 类型——像这样的函数是对 check 的一个轻微调整,它将检查某些东西是否是一个整数值(因此,例如,它将与 一起工作2.02,但不是 '2' 但不是错误输出:

def check3(n):
"prints 'n is an int' if the value is integral"
try:
val = int(n)
if val == n:
print("n is an int")
except ValueError:
pass # return False would also work
print("n is not an int")

相比之下,如果了解 1.01 之间的区别很重要(例如,您有一个 int64 ndarray),那么您会想要使用您的实例检查 check2,因为它会让您知道它完全是一个 int。

它归结为这个问题:它必须一个整数还是表现像一个整数?如果它必须是 int,则使用 check2,如果它必须像 int 一样表现,则使用 check(但可能将其修改为在 try/except 内,如上所示)。

另一种选择是利用抽象基类来允许类似 int 的类型(例如,numpy int dtypes 是整数,但实际上不是 int 的子类),使用抽象基类 numbers。积分

def check4(n):
if isinstance(n, (int, numbers.Integral)):
print("n is an int")
else:
print("n is not an int")

顺便说一句,check4check3很多,因为在抽象基类上检查实例的查找涉及一些处理。

关于python isinstance(n, int) 和 int(n) == n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com