gpt4 book ai didi

python - 检测非标量和非元组?

转载 作者:行者123 更新时间:2023-12-04 09:32:14 25 4
gpt4 key购买 nike

只是出于好奇,我试图用在 lambda 中使用的短代码来检测无标量和无元组......即使用 isinstance 很麻烦。
所以可能的值是:

None
(None, 0)
Value
(Value, 1)
到目前为止 not (not x or not x[0]) , 适用于第 1、2、4 种情况,但不适用于第 3 种情况
xx = lambda x: not( not x or not x[0] )
xx(None) => False
xx((None,0)) => False
xx(5)

TypeError: 'int' object has no attribute '__getitem__'

最佳答案

你会想要某种形式的 is not None区分None来自 0值(value)。
真的没有办法通过强制转换为 bool 值来区分一对和数字。非空元组将始终为真,None 将始终为假,但数字可能为真或假(当为 0 时)。
您可以在一行中完成,而无需使用 isinstance()通过使用 type()反而:

lambda x: {tuple: x}.get(type(x), [x])[0] is not None
# or
lambda x: (x[0] if type(x) is tuple else x) is not None
isinstance()的优势是它适用于子类。

或者使用标准库导入:
from unittest.mock import ANY

lambda x: x not in [None, (None, ANY)]
这种事情在具有模式匹配的语言中很容易。 (Python 可能即将推出,请参阅 PEP 622。)我正在(ab)使用 ANY模拟以达到类似的效果。
小心 ANY .它的工作原理是覆盖 .__eq__().__ne__() ,所以它不一定是自反的。

关于python - 检测非标量和非元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62783028/

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