Каков наилучший способ вернуть несколько значений из функции в Python?
У меня есть функция, где мне нужно что-то сделать со строкой. Мне нужно, чтобы функция возвращала логическое значение, указывающее, была ли операция выполнена успешно, и мне также нужно вернуть измененную строку.
В C# я бы использовал параметр out для строки, но в Python нет эквивалента. Я все еще очень новичок в Python, и единственное, что я могу придумать, это вернуть кортеж с булевой и измененной строкой.
вопрос: это pythonic для функции, возвращающей несколько значений?
5 ответов:
def f(in_str): out_str = in_str.upper() return True, out_str # Creates tuple automatically succeeded, b = f("a") # Automatic tuple unpacking
Почему бы не создать исключение, если операция не была успешной? Лично я склонен считать, что если вам нужно вернуть более одного значения из функции, вы должны пересмотреть, если вы делаете все правильно или используете объект.
но непосредственно к делу, если вы бросаете исключение, вы заставляете их бороться с проблемой. Если вы попытаетесь вернуть значение, которое указывает на сбой, вполне возможно, что кто-то не смог проверить значение и закончить до некоторых потенциально трудно отлаживать ошибки.
возвращает кортеж.
def f(x): # do stuff return (True, modified_string) success, modified_string = f(something)
выбрасывание исключения для сбоя - это один хороший способ продолжить, и если вы возвращаете много разных значений, вы можете вернуть кортеж. Для конкретного случая, который вы цитируете, я часто использую промежуточный подход: возвращаю измененную строку при успехе и не возвращаю ни одного при неудаче. Я достаточно нереконструированный программист C, чтобы захотеть вернуть нулевой указатель на char при сбое.
Если бы я писал процедуру, которая будет использоваться как часть большей библиотеки и потребляться другими разработчики, я бы бросил исключение на неудачу. Когда я ем свой собственный корм для собак, я, вероятно, вернусь разные типы и проверю по возвращении.