根据存在的内容分配多个值中的一个

时间:2010-01-13 16:51:58

标签: php python perl

在Perl中,如果我想为$ myVar赋值$ var1,$ var2或$ var3,基于哪一个评估为真,我会编写以下代码:

$myVar = $var1 || $var2 || $var3;

我正在研究Python和PHP的单独项目,我还没有想出如何用这两种语言简洁地编写这种情况。

用Python编写代码的最佳方法是什么?

用PHP编写代码的最佳方法是什么?

5 个答案:

答案 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'

因此,如果未设置var1var2var3,则myVar将收到“默认”的后备值。否则,您将获得评估为True的任何变量的值。