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)
谢谢,
-安倍.
目前我的代码是这样的:
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)
谢谢,
-安倍.