Pass and return

Steven D'Aprano steve+comp.lang.python at
Fri Dec 21 09:27:47 CET 2012

On Thu, 20 Dec 2012 21:23:58 -0800, iMath wrote:

> Pass and return
> Are these two functions the same ?

They are neither functions, nor are they the same.

Check if they are functions:

- can you pass them arguments?
- can you assign their result to a target?


py> pass(23)
  File "<stdin>", line 1
SyntaxError: invalid syntax
py> x = return
  File "<stdin>", line 1
    x = return
SyntaxError: invalid syntax

Are they the same? Try it with these two functions:

def test_pass():
    for i in range(100):
    print i

def test_return():
    for i in range(100):
    print i

py> test_pass()
py> test_return()

So what are they?

They are *statements*, not functions. You cannot pass them arguments, nor 
do they assign a result to a target on the left hand side of = equals 

"pass" is a do-nothing statement. It literally does nothing.

"return" exits a function and sets the return result. It is only legal 
inside functions and generators, while "pass" is legal almost anywhere. 
Normally you say "return some_value", but you can leave out the result 
and Python will "return None".

If functions get all the way to the bottom without a return statement, 
they will return None.

The example you give:

> def test():
> 	return

The body of the function immediately returns None. But functions return 
None by default, so you could leave the "return" statement out. If you do 
that, you will get a SyntaxError because there is nothing in the body:

py> def test():
  File "<stdin>", line 3
IndentationError: expected an indented block

So if you put a "pass" statement in, just to satisfy the compiler, you 
get the same result:

> def test():
> 	pass

Also a function which immediately exists and return None.


More information about the Python-list mailing list