gpt4 book ai didi

python - 等价于 Python 中的 Ruby nil 数组

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

在 Ruby 中,如果访问第一个元素,则空数组返回 nil:

2.1.2 :005 > arr = []
=> []
2.1.2 :006 > arr.first
=> nil
2.1.2 :007 > arr[0]
=> nil

我知道 Python 列表与 Ruby 数组并不完全相同,但是如果您尝试等效的操作,则会出现错误:

>>> l = []
>>> l[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>

我怎样才能得到 False 或 None 值而不是错误?

理想情况下,如果函数调用不返回任何内容,但使用内联检查而不是 if block ,我希望这样的赋值解析为 None/False。

tp_journal = self.pool.get('account.journal').browse(cr, uid, tp_ids, context=context)[0]

最佳答案

没有简单的方法可以实现您想要的。列表操作引发错误,句点。

但是您可以通过以下方式解决:

  • 当列表为空时访问其他内容
  • 不使用索引

在第一种情况下,您可以使用空列表为假的事实,因此 (expression) 或 [None] 将在 时评估为 [None] >expression 返回一个空列表,因此:

((expression) or [None])[0]

替代方案是避免使用索引,而是使用迭代和 next 获取第一个元素:

next(iter(expression), None)

不幸的是,您必须显式调用 iter 才能获得列表迭代器。

要将这些方法扩展到任何索引,您可以使用切片而不是简单的索引:

((expression)[index:] or [None])[0]

或者:

next(islice(expression, index, None), None)
# or
next(iter(expression[index:]), None)

(其中 isliceitertools.islice)。

这是可行的,因为切片不会引发越界索引的错误。


如果您在代码中经常使用函数,我更喜欢的替代方法是:

def get_with_default(seq, index):
try:
return seq[index]
except LookupError:
return None

关于python - 等价于 Python 中的 Ruby nil 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871092/

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