IF/THEN的Python语法与PHP的比较
我有一个PHP代码:IF/THEN的Python语法与PHP的比较,php,python,syntax,if-statement,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; 我在所有地方都使用这种基本结构,可能不太好,但我已经习惯了。这些函数基本上尝试执行一些简单的操作,如果失败,它们将返回一个空值。在将其移植到Pyt
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的方法,我没有呢?类似于:
return checkIndiv(name) or addIndiv(name)
比如:
return checkIndiv(name) or addIndiv(name)
代码的基本问题是最后一个分支没有任何用途。即使在您的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)
代码的基本问题是最后一个分支没有任何用途。即使在您的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)
使用
如果indivu id不是None:
或者更简洁地使用如果indivu id:
这整件事是不是打算成为某种获取或创建()
?我和fingerman在一起,你应该先找到elif。@fingerman:elif在这种情况下会有什么帮助?哦,真不敢相信我那里没有elif。谢谢你的提醒。如果indivu id不是None,请使用,
或者更简洁地使用如果indivu id:
这整件事都是为了某种获取或创建()
?我和fingerman在一起,你应该先找到elif。@fingerman:elif在这种情况下会有什么帮助?噢,真不敢相信我那里没有elif。谢谢你的提醒。也许简短,但可读?checkIndiv和addIndiv似乎都不做它们的名字所宣传的事情。这些函数做什么?我没有写他们的名字。OP要求一个更简单的方法。非常感谢。我不知道Python中的这种语法,现在在所有函数中都使用它。这些函数有点混乱——基本上,它们检查某个记录是否已经输入到数据库中,如果没有,则添加它。在这两种情况下,它们都返回记录的id。可能很短,但可读吗?checkIndiv和addIndiv似乎都不做它们的名字所宣传的事情。这些函数做什么?我没有写他们的名字。OP要求一个更简单的方法。非常感谢。我不知道Python中的这种语法,现在在所有函数中都使用它。这些函数有点混乱——基本上,它们检查某个记录是否已经输入到数据库中,如果没有,则添加它。在这两种情况下,它们都会返回记录的id。您的回答非常有用,我实际上用它来回答我遇到的另一个问题。现在如果你想让我帮你发帖…@tchaymore:不,我很高兴我能帮上忙。你的回答非常有用,我实际上用它来回答我遇到的另一个问题。现在如果你想让我帮你发帖…@tchaymore:不,我很高兴能帮上忙。