Какой лучший способ вернуть несколько значений из функции в Python?

python variables return

73264 просмотра

5 ответа

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

В C # я бы использовал параметр out для строки, но в Python нет эквивалента. Я все еще очень плохо знаком с Python, и единственное, о чем я могу подумать, это вернуть кортеж с логической и модифицированной строкой.

Связанный вопрос: является ли pythonic для функции, чтобы возвратить многократные значения?

Автор: sectrean Источник Размещён: 29.07.2019 08:48

Ответы (5)


126 плюса

Решение
def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

succeeded, b = f("a") # Automatic tuple unpacking
Автор: John Millikin Размещён: 01.09.2008 10:04

29 плюса

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

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

Автор: Jason Baker Размещён: 01.09.2008 10:09

16 плюса

Верните кортеж.

def f(x):
    # do stuff
    return (True, modified_string)

success, modified_string = f(something)
Автор: rmmh Размещён: 01.09.2008 10:03

7 плюса

Возврат кортежа - это обычный способ сделать это в Python.

Автор: Chris Upchurch Размещён: 01.09.2008 10:03

3 плюса

Создание исключения для сбоя - это хороший способ продолжить работу, и если вы возвращаете много разных значений, вы можете вернуть кортеж. Для конкретного случая, на который вы ссылаетесь, я часто использую промежуточный подход: возвращать измененную строку в случае успеха и возвращать None в случае неудачи. Мне достаточно невосстановленного программиста на C, чтобы хотеть возвращать NULL-указатель на char при ошибке.

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

Автор: tuxedo Размещён: 02.09.2008 03:15
32x32