我在PHP中有这个代码:
if($id = $this->ci->srr->check_faca_indiv($name))
{
return $id;
} elseif($id = $this->_addIndiv($name)) {
return $id;
} else {
return null;
我在整个地方使用这个基本结构,它可能不是很好,但它是我习惯的。函数基本上尝试做一些简单的操作,如果失败则返回null值。我试图模仿它将它移植到Python,但是语法错误并最终将其修改为:
indiv_id = checkIndiv(name)
if indiv_id != None:
return indiv_id
indiv_id = addIndiv(name)
if indiv_id != None:
return indiv_id
else:
return None
我认为这让我到了同一个地方,但我不喜欢它 - 是否有一种类似于PHP的方式我缺少?
答案 0 :(得分:5)
类似的东西:
return checkIndiv(name) or addIndiv(name)
答案 1 :(得分:2)
您的代码的基本问题是最终分支没有用处。即使在你的PHP示例中,它基本上也会说:
if (null) return null;
您可以将所有内容减少到:
indiv_id = checkIndiv(name)
if indiv_id:
return indiv_id
else:
return addIndiv(name)
(如果indiv_id可能会与False
进行比较,则应检查None
,但使用is
代替==
!)
也许你可以使用例外:
def check_or_add(name):
try:
return checkIndiv(name)
except CheckException:
return addIndiv(name)
总的来说,你的语义让我觉得奇怪:我不希望名称中带有“check”的函数返回一个对象,而不仅仅是True
或False
。我可能会使用不同的名字:
id = get_indiv(name)
if id:
return id
else:
return new_indiv(name)
这使詹姆斯的解决方案也更具可读性:
return get_indiv(name) or new_indiv(name)