Назначение одного из нескольких значений на основе того, что существует - PullRequest
0 голосов
/ 13 января 2010

В Perl, если я хочу присвоить $ myVar значение $ var1, $ var2 или $ var3, исходя из которого оценивается как true , я бы написал следующее:

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

Я работаю над отдельными проектами как на Python, так и на PHP, и я не понял, как кодировать эту ситуацию так кратко на любом языке.

Какой лучший способ кодировать это на Python?

Какой лучший способ кодировать это в PHP?

Ответы [ 5 ]

3 голосов
/ 13 января 2010

Perl 'autovivizes' переменные при первой ссылке (насколько я помню). Python поднимет NameError, если переменная не существует. Тем не менее, вы можете сделать что-то вроде этого.

var1 = var2 = var3 = None
# code that might change the value of three variables mentioned above
myvar = var1 or var2 or var3

Вообще говоря, проверка определения переменной (и изменение потока управления на ее основе) - плохая вещь в Python. Вы должны использовать словарь и ключи.

2 голосов
/ 13 января 2010

В Python, я полагаю, вы можете сказать

myVar = var1 or var2 or var3

Документация Python описывает x or y как

если x ложно, то y, иначе x

Редактировать : theatrus поднимает интересный вопрос - я даже не думал, что переменные не могут быть определены. Я нашел это обсуждение по этому вопросу:

Python не имеет определенного функция для проверки, является ли переменная определены, так как все переменные как ожидается, был определен ранее использовать - даже если изначально только назначен Нет объекта. Попытка доступа переменная, которая ранее не была определенный вызовет исключение.

Обычно считается необычным в Python не знать, является ли переменная уже был определен. Но если ты тем не менее, в этой ситуации, Вы можете убедиться, что данный переменная фактически определена (как None, если ничего другого) пытаясь получить доступ к нему внутри блока «try» и присвоение ему объекта None, если оно вызвать исключение NameError.

Так что, если вы не гарантированы, что переменные существуют, и вы хотите проверить одну за другой на предмет наличия и достоверности, возможно, вам нужен какой-то грязный код.

1 голос
/ 14 января 2010

В 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;
1 голос
/ 13 января 2010

В PHP вы можете использовать isset(), чтобы проверить, установлена ​​ли переменная и не равна ли она нулю. Чтобы достичь того, что вы ищете, вы можете проверить, установлены ли значения $var1, $var2 или $var3, а затем установить значение $myVar

.

Но будьте осторожны, в зависимости от состояния, для которого вы хотите установить $myVar, это будет иметь значение true:

$str = '';
var_dump(isset($str)); // TRUE
0 голосов
/ 13 января 2010

В 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...