Python: в порядке это, возвращаясь и булевскую переменную и строку?

Вам необходимо использовать функцию Promise.all, где вы помещаете свой массив обещаний

var array1 = [1, 4, 9, 16];

// pass a function to map
const test = async () => {
  const map1 = await Promise.all(array1.map(async x => 'hi'));
  return map1;
}

test().then((data) => {
  console.log(data)
});

ожидаемый вывод: Array ['hi', 'hi', 'hi', 'hi']

8
задан Giffyguy 5 August 2009 в 18:14
поделиться

8 ответов

Было бы лучше возвратить строку И булевскую переменную (как в заголовке) вместо того, чтобы возвратить строку ИЛИ булевскую переменную. Вам не придется выяснить то, что означает возвращаемое значение. Это должно быть полностью явно, и ортогональные проблемы должны быть разделены на различные переменные.

(okay,value) = get_some_input(blah);
if (okay): print value

Я склонен не возвращать кортежи много, потому что это чувствует себя забавным. Но это совершенно допустимо, чтобы сделать так.

Возврат "Ни одного" является допустимым решением, уже упомянутым здесь.

7
ответ дан 5 December 2019 в 04:30
поделиться

Разве это не более подошло бы для возврата a None вместо False?

26
ответ дан 5 December 2019 в 04:30
поделиться

Я полагаю, что православный дизайн Python не должен был бы возвращать Ни один. В руководстве говорится:

Ничего

Этот тип имеет единственное значение. Существует отдельный объект с этим значением. К этому объекту получают доступ через встроенное имя Ни один. Это используется для выражения отсутствия значения во многих ситуациях, например, это возвращается из функций, которые ничего явно не возвращают. Его значение истинности является ложью.

10
ответ дан 5 December 2019 в 04:30
поделиться

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

5
ответ дан 5 December 2019 в 04:30
поделиться

Удобная вещь состоит в том, чтобы возвратить пустую строку в этом случае.

Помимо пустой строки в Python оценит ко Лжи так или иначе. Таким образом, Вы могли назвать его как:

if Myfunc(s, timeout):
    print "success"

Дополнение: Как указано S.Lott истинный Pythonic путь не состоит в том, чтобы возвратить Ни один. Хотя я выбираю к возвращаемым строкам в строке связанный funcs. Вопрос предпочтения действительно.

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

6
ответ дан 5 December 2019 в 04:30
поделиться

Для добавления к точке Частоты ошибок по битам Вы могли бы хотеть принять что-то еще во внимание. При использовании пустой строки или Ни одного Вы оставляете дверь открытой для ошибок "немого" разнообразия. С другой стороны, при повышении исключения Вы вызываете выполнение любой операции, работает, чтобы быть прерванным.

Например, рассмотрите следующий код:

result = MyFunc(s, timeout)
if result[0] == 'a':
    do_something()

Это повысит исключение, если приведенная к таймауту операция и получила или пустую строку или Ни один. Таким образом, необходимо было бы изменить это на:

result = MyFunc(s, timeout)
if result and result[0] == 'a':
    do_something()

Эти виды изменений имеют тенденцию складывать и делать Ваш код более трудным понять.

Конечно, я уверен, что Ваш ответ на это будет чем-то вроде, "Я не сделаю этого" или, "которого не произойдет", к которому мой ответ, "Даже если Вы не столкнетесь с ним с этой функцией, то Вы будете в конечном счете при создании привычки к выполнению этого". Эти виды ошибок являются почти всегда результатом угловых случаев, о которых Вы обычно не думаете.

2
ответ дан 5 December 2019 в 04:30
поделиться

Возможно, при возврате кортежа как (Ложь, Ни один) и (Правда, тест), это было бы лучше, поскольку можно оценить их separatedly и не добавить ненужную сложность.

Править: Возможно, строка, которая появилась на последовательном порте, "" (возможно, ожидаемый), так возвращение True может сказать, что прибыло тот путь.

3
ответ дан 5 December 2019 в 04:30
поделиться

Это - классический вариант использования для генераторов Python. yield ключевое слово обеспечивает простой способ выполнить итерации по дискретным наборам, не возвращая все это сразу:

def MyFunc(s, timeout) :
    test = get_some_input(timeout)
    while test.endswith(s)
        yield test
        test = get_some_input(timeout)

for input in MyFunc(s, timeout):
    print input

Ключ здесь нет никакого возвращаемого значения для определения конца входа; вместо этого, Вы просто достигаете конца итератора. Больше информации о генераторах здесь.

1
ответ дан 5 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: