在Perl中,如果我想为$ myVar赋值$ var1,$ var2或$ var3,根据哪一个的求值为真,我会编写以下代码:根据所存在的值分配多个值中的一个
$myVar = $var1 || $var2 || $var3;
我工作在Python和PHP单独的项目,我还没有想出如何在两种语言简洁的代码这种情况。
在Python中对此进行编码的最佳方式是什么?
在PHP中对此进行编码的最佳方式是什么?
在Perl中,如果我想为$ myVar赋值$ var1,$ var2或$ var3,根据哪一个的求值为真,我会编写以下代码:根据所存在的值分配多个值中的一个
$myVar = $var1 || $var2 || $var3;
我工作在Python和PHP单独的项目,我还没有想出如何在两种语言简洁的代码这种情况。
在Python中对此进行编码的最佳方式是什么?
在PHP中对此进行编码的最佳方式是什么?
Perl'autovivifies'首次引用时的变量(据我所知)。如果变量不存在,Python将引发一个NameError
。但是,你可以做这样的事情。
var1 = var2 = var3 = None
# code that might change the value of three variables mentioned above
myvar = var1 or var2 or var3
一般来说,检查一个变量是否定义(并根据它来改变控制流)在Python中是一件坏事。你应该使用字典和键。
关于Perl,你有错误的术语。如果你不使用'strict'编译指示,变量不需要在使用前声明(就像PHP一样)。始终严格使用并被视为最佳做法,并尽可能在最小范围内根据需要将其关闭。 Autovivification是不同的。这意味着如果你有一个深层次的数据结构(例如一个4维数组),你可以简单地说'$ array [1] [3] [2] [0] = 5;''而不必做'$ array [1] = []; $阵列[1] [3] = []; $ array [1] [3] [2] = []; $ array [1] [3] [2] [0] = 5;'。所有的中间结构都是自动的。 – daotoad 2010-02-02 16:33:35
感谢您的澄清! :) – 2010-02-02 17:10:26
在Python,我相信你可以说
myVar = var1 or var2 or var3
Python文档描述x or y
作为
如果x是假的,那么y,否则x
编辑 :theatrus提出了一个有趣的观点 - 我甚至没有考虑到变量可能不是def独立非执行董事。我发现对此事的讨论:
Python没有一个特定的 功能测试一个变量是否被定义 ,因为所有的变量都 之前预期 使用已定义的 - 即使最初只是None对象分配了 。试图访问 以前未定义的变量会引发异常。
它通常被认为是不常见的 Python不知道变量 是否已被定义。但是,如果你 是仍然在这种情况下, 你可以尝试 访问它一个“尝试”块内, 为其分配确保给定 变量实际上定义(如无, 如果没有别的) 不应该引发NameError异常。
所以,如果你不能保证变量存在,并且你想一个接一个地检查存在性和真实性,你可能会遇到一些混乱的代码。
这仅适用于声明了var1/2/3但可能为False的情况。如果未声明var1/2/3,则会导致名称错误。 – 2010-01-13 16:56:43
如果'var1'不存在*,会导致异常。 – badp 2010-01-13 17:01:08
你可以检查'locals()'和'globals()'字典来查看变量是否被定义,但所有这些都不是Python的方式。 – 2010-01-13 17:48:25
在PHP中,您可以使用isset()
来测试变量是否已设置,而不是空值。为了实现你在找什么,你可以检查是否$var1
,$var2
或$var3
设置,然后将值设置为$myVar
但是这取决于你想设置你$myVar
来,这将评估的条件提防true:
$str = '';
var_dump(isset($str)); // TRUE
也有conditional expressions在Python在Python 2.5增加:
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
的任何一组var的值。
在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;
你真的不应该这样做蟒蛇。如果你需要名称存在或不存在,那么你应该使用dict来代替。 – 2010-01-13 16:57:38
正如其他人指出的那样,变量在Python中的存在并不能很好地映射到PHP。如果您可以更多地告诉我们“存在”的含义,您将得到更好的Python答案。 – 2010-01-13 17:20:36
在perl中,假设您使用的是现代perl,您应该真的在说'$ myVar = $ var1 // $ var2 // $ var3;'。 – dave4420 2010-01-13 17:21:33