gpt4 book ai didi

python - 我应该使用 `==` 与 `(None, None)` 元组进行比较吗?

转载 作者:行者123 更新时间:2023-11-28 21:31:47 27 4
gpt4 key购买 nike

我有一个函数,它可以返回两个整数的元组或(None, None)的元组:

(出于本问题的目的,我们假设此返回格式是执行此操作的唯一方法,并且无法更改)

from typing import Tuple, Union

def foo(n: int) -> Union[Tuple[int, int], Tuple[None, None]]:
if n < 0:
return None, None
return n, n

然后我想写一个pytest单元测试来测试这个函数。人们总是说应该将 Noneis 进行比较,但这显然行不通:

def test_foo():
assert foo(1) == (1, 1)
assert foo(-1) is (None, None) # fails obviously!

在这种情况下我应该只使用 == 来比较结果吗?

def test_foo():
assert foo(1) == (1, 1)
assert foo(-1) == (None, None) # best way?

最佳答案

您应该使用 ==,但实际上使用 is 会失败并不“明显”。

例如

def foo():
return (1, 2)

print(foo() is foo())

可能实际上返回True(在CPython中确实如此,不确定其他实现)。

元组不应被视为实体,而是值。不应使用值上的标识,因为它可能匹配或不匹配(例如字符串或数字的情况)。

如果在上面的代码中使用 [1, 2] 而不是 (1, 2) 则保证 is 将返回False 因为列表是实体,而不是值,并且身份可以以可预测的方式使用。

关于python - 我应该使用 `==` 与 `(None, None)` 元组进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490194/

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