【问题标题】:Python syntax for IF/THEN Compared to PHPIF/THEN 的 Python 语法与 PHP 的比较
【发布时间】:2011-04-19 00:09:06
【问题描述】:

我在 PHP 中有这样的代码:

 if($id = $this->ci->srr->check_faca_indiv($name))
{
    return $id;
} elseif($id = $this->_addIndiv($name)) {
    return $id;
} else {
    return 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 的方法我错过了?

【问题讨论】:

  • 使用if indiv_id is not None:或更简洁的if indiv_id:
  • 这整件事是不是打算成为某种get_or_create()
  • 我和fingerman在一起,你应该先找到elif。
  • @fingerman:在这种情况下,elif 将如何提供帮助?
  • D'oh -- 不敢相信我没有 elif。谢谢提醒。

标签: php python syntax if-statement


【解决方案1】:

类似:

return checkIndiv(name) or addIndiv(name)

【讨论】:

  • 可能很短,但可读吗? checkIndiv 和 addIndiv 似乎都不像他们的名字所宣传的那样。
  • 函数有什么作用?我没有写或命名它们。 OP要求一种更简单的方法。
  • 非常感谢。我不知道 Python 中的这种语法,现在正在使用它的所有功能。这些函数有点混乱——基本上它们检查某个记录是否已经输入到数据库中,如果没有,则添加它。在这两种情况下,它们都会返回记录的 id。
【解决方案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)

这也使 James 的解决方案更具可读性:

return get_indiv(name) or new_indiv(name)

【讨论】:

  • 您的回答非常有帮助,我实际上用它来回答我遇到的另一个问题。现在,如果你想让我为你发布这个问题......
  • @tchaymore:不,我很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2022-10-23
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2018-10-15
相关资源
最近更新 更多