在Perl中,如果我想为$ myVar赋值$ var1,$ var2或$ var3,基于哪一个评估为真,我会编写以下代码:
$myVar = $var1 || $var2 || $var3;
我正在研究Python和PHP的单独项目,我还没有想出如何用这两种语言简洁地编写这种情况。
用Python编写代码的最佳方法是什么?
用PHP编写代码的最佳方法是什么?
答案 0 :(得分:3)
Perl'首次引用时自动修改'变量(据我记得)。如果变量不存在,Python将引发NameError
。但是,你可以做这样的事情。
var1 = var2 = var3 = None
# code that might change the value of three variables mentioned above
myvar = var1 or var2 or var3
一般来说,检查变量是否已定义(以及基于此更改控制流)在Python中是一件坏事。你应该使用字典和密钥。
答案 1 :(得分:2)
在Python中,我相信你可以说
myVar = var1 or var2 or var3
Python文档将x or y
描述为
如果x为假,则为y,否则为x
编辑:theatrus提出了一个有趣的观点 - 我甚至没有考虑过可能没有定义变量。我在这件事上找到了这个讨论:
Python没有特定的 函数来测试变量是否是 定义,因为所有变量都是 预计之前已定义 使用 - 即使最初刚刚分配 无对象。试图访问 以前没有的变量 定义将引发异常。
通常被认为是不寻常的 Python不知道是否有变量 已经定义了。但如果你 但在这种情况下, 你可以确定一个给定的 变量实际上是定义的(如无, 如果没有别的)通过尝试 在'try'块中访问它 应该为它分配None对象 引发NameError异常。
所以,如果你不能保证变量存在,并且你想逐一检查存在性和真实性,你可能会遇到一些混乱的代码。
答案 2 :(得分:1)
在PHP中,您可以使用isset()
来测试变量是否设置而不是null。要实现您的目标,您可以检查是否设置了$var1
,$var2
或$var3
,然后将值设置为$myVar
但请注意,根据您要将$myVar
设置为的条件,这将评估为true:
$str = '';
var_dump(isset($str)); // TRUE
答案 3 :(得分:1)
在PHP中你可以这样做(假设设置了变量):
$vars = array($var1, $var2, $var3);
foreach ($vars as $var) {
if ($myvar = $var) {
break;
}
}
或者,为了让它稍微变得更好:):
foreach(array($var1,$var2,$var3)as$var)if($myvar=$var)break;
答案 4 :(得分:0)
Python 2.5中还添加了conditional expressions:
x = true_value if condition else false_value
我不能和PHP说话。
要记住两种语言的一点是,尝试评估不存在的变量总是会引发错误。使用Python,你可以通过捕获NameError
异常来解决这个问题,如果你尝试这种异常并回退到默认值:
>>> try:
... myVar = var1 or var2 or var3
... except NameError:
... myVar = 'default'
...
>>> myVar
'default'
因此,如果未设置var1
,var2
或var3
,则myVar
将收到“默认”的后备值。否则,您将获得评估为True
的任何变量的值。