IF / THEN的Python语法与PHP相比

时间:2011-04-19 00:09:07

标签: php python syntax if-statement

我在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的方式我缺少?

2 个答案:

答案 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”的函数返回一个对象,而不仅仅是TrueFalse。我可能会使用不同的名字:

id = get_indiv(name)
if id:
    return id
else:
    return new_indiv(name)

这使詹姆斯的解决方案也更具可读性:

return get_indiv(name) or new_indiv(name)