Python3如何尝试多个函数来查找和赋值?

Python3 how to try multiple functions to find and assign value?

目前我的代码是这样的:

img = find_image_in_feed(feed)
if img:
    e.image = img
if not e.image:
    img = find_image_on_site(site)
    if img:
        e.image = img

它有效,但它看起来令人困惑且难以扩展。将来可能会有多个 find_image(...) 函数。在这种情况下,我应该使用一些 "design pattern" 吗? 我的第二个想法对我来说也不干净,因为同时分配和检查值。

if img = find_image_in_feed(feed):
    e.image = img
elif img = find_image_on_site(site):
    e.image = img

我希望我的代码尽可能易于阅读,但我感觉我遗漏了一些明显的东西。

您可以使用 or,它的工作方式类似于 null coalescing operator:

e.image = find_image_in_feed(feed) or find_image_on_site(site)

上面,e.image 设置为 find_image_in_feed(feed),如果它 return 的值是 true,否则它会返回到 return 值 [=17] =].

>>> value = 5 or 6
>>> print(value)
5
>>> value = [] or [1, 2, 3]
>>> print(value)
[1, 2, 3]

在Python中,or是一个短路运算符,所以它只在find_image_in_feed(feed)为假时计算find_image_on_site(site)

--

如果你不 e.image 被设置为 None 当两个调用 return None:

e.image = find_image_in_feed(feed) or find_image_on_site(site) or e.image

我看到了两种可以在不牺牲可读性的情况下简化代码的潜在方法。

答:通过设置一次e.image。

img = find_image_in_feed(feed)
if not img:
    img = find_image_on_site(site)
e.image = img

B:或利用 python 三元运算符

img = find_image_in_feed(feed)
e.image = img if img else find_image_on_site(site)

python ternary operators

谢谢,

-安倍.