Можно ли ничего не возвращать из функции в Python?
Это возвращает none, если foo_input is > 100 . Но может ли оно «не» вернуть что-нибудь? или функция всегда должна что-то вернуть?
функции цепочки, и если я собирался написать, попробуйте попробовать: кроме предложений для каждой из них (из-за того, что не передается)
use969617: Что произойдет, если не будет возвращен результат? Если выполнение было пропущено, то вы можете получить те же функциональные возможности, используя оператор if для проверки на None — хотя, с большей вероятностью, вы получите результат, чем None, перехват исключений — лучшая идея, так как Python следует запросу прощение, а не принцип разрешения .
Хорошо, помните, что исключения исключаются, поэтому, если вы хотите отловить ошибку из-за None любом месте вашего процесса, вы можете просто обернуть весь блок в перехват для TypeError s. Очевидно, только обернуть сегмент, для которого это необходимо, но нет необходимости для тонны той же try . except . блоков
@user969617 user969617 Буквально просто try: . except TypeError: . где . любой код на Python, который вы хотите (правильно с отступом и с новыми строками, естественно, комментарий не дает мне). Смотрите документы по Python для получения дополнительной информации.
5 ответов
Функции всегда возвращают что-то (по крайней мере, None , когда во время выполнения не было достигнуто выражение return), а конец функции достигнут).
Другой случай, когда они прерываются исключениями. В этом случае обработка исключений будет «доминировать над стеком», и вы вернетесь к соответствующему except или получите некоторую неприятную ошибку:)
Что касается вашей проблемы, я должен сказать, что есть две возможности: Либо у вас есть что-то вернуть, либо у вас его нет.
- Если у вас есть что-то вернуть, тогда сделайте это, а если нет, то нет.
- Если вы полагаетесь на возвращаемое то, что имеет определенный тип, но вы не можете вернуть ничего значимого в этом типе, тогда None сообщит вызывающему, что это так ( Нет лучшего способа сообщить вызывающему, что «ничего» не возвращается, а затем None , поэтому проверьте его, и все будет в порядке)
Нет. Если инструкция return не была достигнута до конца функции, возвращается неявный None .
Если оператор return не достигнут, функция возвращает None .
Я не уверен, что вы на самом деле пытаетесь сделать. Вот несколько вещей, которые вам могут понравиться:
def foo(foo_input, foo_default): if 0
Подождите, вы сказали "фильтр". Вы фильтруете ряд значений, и вы просто хотите извлечь те, которые соответствуют критериям? Это легко в Python:
И вы сказали "функции цепочки". Снова это легко, если мы говорим о фильтрации последовательности:
def foo_filter(seq): for x in seq: if 0
Там нет причин использовать функцию, более понятно, просто сделать это как [x for x in sequence if 0
@steveha: зачем использовать понимание списка, когда есть встроенная функция filter ? filtered_list = filter(foo_filter, unfiltered_sequence)
@Lattyware: Lattyware: я бы сказал иначе. Также это зависит от того, насколько читатель привык к той или иной конструкции. И как ленивый программист я бы сказал: это короче 🙂
в более широком контексте, я читаю последовательное соединение (строки от 0 до 1023), я отфильтровываю строки, которые также содержат символы, т.е. '102? 3', этот фильтр является третьим в серии, который пропускает только сквозные фильтры в диапазоне от 1 до 100.
Если бы вы фильтровали 100 в секунду, это было бы хорошо. Для максимальной производительности в Python вы должны написать «ленивый» код, который не создает временные списки, а затем удалить их, чтобы код yield полезен для создания цепочек фильтров.
@steveha Или просто используйте выражения генератора. (x for x in (x for x in unfiltered_iterator if other_filter(x)) if foo_check(x)) .
@Nobody Никто, если вы являетесь частью сообщества функционального программирования, вы, вероятно, предпочитаете filter() . Сообщество Python обычно предпочитает списки. Кроме того, в Python 2.x filter() не ленив и всегда создает объект (по умолчанию список).
@Lattyware Lattyware, я согласен, что для этого простого примера разумно было бы поместить выражение в список. У меня есть тенденция разбивать вещи на функции для удобства чтения, особенно когда отвечаю на вопросы о StackOverflow.
@steveha Естественно, читабельность - это суждение, и то, что работает в одной ситуации, не всегда работает в других.
@steveha: Ну, я не настолько «функционален» ^^ И для меня это всегда казалось наоборот. Также я не понимаю, почему функция фильтра должна создавать дополнительный список по сравнению с пониманием.
В Python 3.x встроенный filter() ленив. Но вы также можете написать цикл, который будет yield ответы, как я показал, и вы также можете написать выражение генератора.
@Nobody Никто, запустите Python 2.x, а из приглашения >>> введите help(filter) и прочитайте, что там написано. В нем прямо сказано, что он вернет список, кортеж или строку. Теперь запустите Python 3.x и сделайте то же самое; прямо сказано, что он вернет итератор. Так что, может быть, вы не понимаете, почему он должен это делать, но я говорю о том, что он на самом деле делает. Я думаю, что причина историческая: я думаю, что filter() был введен до того, как были добавлены итераторы. Конечно, в Python 2.x вы можете использовать itertools.ifilter() или написать свою собственную функцию, которая зацикливается и вызывает yield .
@steveha, что составляет «последовательность»? если они являются числами, считанными из последовательного соединения - они все еще являются последовательностью?
«Последовательность» означает все, что Python может повторять. Список или кортеж - это последовательность. Строка - это последовательность символов. Любой итератор также является последовательностью (генераторы являются своего рода итератором). Вероятно, у вас должна быть функция, которая читает последовательные данные и вызывает yield для их возврата. Если у вас есть класс, обертывающий ваш последовательный порт, экземпляр класса должен работать как итератор: stackoverflow.com/questions/19151/build-a-basic-python-iterator
@steveha: Ну, конечно, фильтр возвращает список, но понимание списка делает то же самое, и это было то, что я просил. Но давайте не будем растягивать эту дискуссию излишне. Спасибо, что указали мне на help я время от времени забываю (я зомби из Google :).
Хороший ответ. Новичку было бы полезно иметь объяснение использования yield , а не return или чего-то еще.
What is the Use of Return Statement in Python?
In Python we use “return” as a keyword, here we can use a function with or without a return statement. If any function is called with return statement it simply returns the value and exit a function.
Return statement simply returns the values as output whereas print() function simply print the value.
Example With Return Statement
# Python 3 Code # working on return statement def addvalue(a, b): return a + b c = addvalue(10, 34) print(c)
Explanation
Here we have created a function name addvalue() to add two value a & b and return the value as output by using the return statement. The def keyword is used for creating a method called addvalue(a,b) that takes two parameters and returns their summation. The result of a+b is provided to the user by the return statement.
Then the method addvalue() is called with arguments 10 and 34. The value of the method is stored in the variable c. The next statement prints out the value of c.
The final output of the addvalue() method is 44.
Example Without Return Statement
# Python 3 Code # Function without return statement def addvalue(a, b): # Print the value of a+b print(a + b) addvalue(10, 34)
Explanation
In the above-given example, we have used print function to print the output of the function. As you can see in the above example print function returns nothing but print the value directly as output.
The addvalue() method defined by the def keyword takes two parameters. The parameters a and b are added using the print() function. The last line of the code invokes the addvalue() method. Two arguments 10 and 34 are passed to the addvalue() method. The final output is 44.
Python Return Multiple Values
A function can return only one value or object as output, but if you want to return multiple values then you can return the same with the help of list, dictionary and tuple.
All you need to do is convert your multiple outputs into a list (array), dictionary or tuple, and return them as a single object.
# Python 3 Code # Function return multiple value as list def myfunction(a, b): # Print the value of a+b add = a + b sub = a - b return(add, sub) # Take multiple value in list multiv = myfunction(10, 34) # Print values in list print('Addition: ', multiv[0]); print('Subtraction: ' , multiv[1]);
Addition: 44 Subtraction: -24
Explanation
Here, a method called myfunction() is defined and has two parameters a and b. The two parameters are added/subtracted and stored in a variable called add/sub respectively. The return statement returns the value of add and sub.
Then the myfunction() method is called with the arguments 10 and 34. The result of the function call is stored in the variable multiv. So, now the multiv variable has two values – the result of (a+b) and (a-b). The first print() statement prints out the element at the first index of the variable multiv. Similarly, the next print statement prints out the element at the second index of the multiv variable.
Return True, False & String
# Python 3 Code # Function return Boolean True/False def myfunction(a, b): if(a > b): return True # Return True elif(a == b): return 'A is Equal to B' # Return String else: return False # Return False # Check Boolean print(myfunction(10, 34)) print(myfunction(10, 10)) print(myfunction(22, 11))
False A is Equal to B True
Explanation
In this program, a function called myfunction() is defined. It takes two parameters a and b. An if statement checks whether the value of a is greater than b. If this is true, the return statement returns True. Else, if the value of a is equal to b, a string 'A is Equal to B' is returned by the function. Otherwise, False is returned by the program.
In the end, there are three print statements that display the result of calling the myfunction() method. As the function is passed two values 10 and 34, the first output is False, as 10 is lesser than 34. The next two arguments are 10 and 10. So the output is A is Equal to B.
The last two arguments passed to the myfunction() method are 22 and 11. Thus, as the 22 is greater than 11, the final output is True.
Difference between Return and Print Statement in Python
Returns the value of a function as output.
Print the value of function on terminal.
The output of the function can be pass to other function.
Output can not pass to other function.
# Python 3 Code # working on return statement def addvalue(a, b): return a + b c = addvalue(10, 34) print(c)
def addvalue(a, b): # Print the value of a+b print(a + b) addvalue(10, 34)
The return and print statements are equally important for programming.
If you just want to execute a simple function that returns a value, the return statement will be enough. In case you want to return a value but also have to print it to the terminal, you need to use the print() method. The print() method can be easily used for displaying the result of a function call to the user.
- Null Object in Python
- TypeError: 'int' object is not subscriptable
- Python Comment
- Python lowercase
- Python String find
- Invalid literal for int() with base 10 in Python
- Python Pass Statement
- Python Enumerate
- Python input()
- Python eval
- Python Range
- Python IDE
- Python Print Without Newline
- Python Split()
- Only Size-1 Arrays Can be Converted to Python Scalars
- Attribute Error Python
- Python Combine Lists
- Python list append and extend
- Remove Punctuation Python
- Python KeyError