what is the difference between return and break in python?
break
is used to end a loop prematurely while return
is the keyword used to pass back a return value to the caller of the function. If it is used without an argument it simply ends the function and returns to where the code was executing previously.
There are situations where they can serve the same purpose but here are two examples to give you an idea of what they are used for
Using break
Iterating over a list of values and breaking when we've seen the number 3
.
def loop3():
for a in range(0,10):
print a
if a == 3:
# We found a three, let's stop looping
break
print "Found 3!"
loop3()
will produce the following output
0
1
2
3
Found 3!
Using return
Here is an example of how return
is used to return a value after the function has computed a value based on the incoming parameters:
def sum(a, b):
return a+b
s = sum(2, 3)
print s
Output:
5
Comparing the two
Now, in the first example, if there was nothing happening after the loop, we could just as well have used return
and "jumped out" of the function immediately. Compare the output with the first example when we use return
instead of break
:
def loop3():
for a in range(0, 6):
print a
if a == 3:
# We found a three, let's end the function and "go back"
return
print "Found 3!"
loop3()
Output
0
1
2
3
break
is used to end loops while return
is used to end a function (and return a value).
There is also continue
as a means to proceed to next iteration without completing the current one.
return
can sometimes be used somewhat as a break when looping, an example would be a simple search function to search what
in lst
:
def search(lst, what):
for item in lst:
if item == what:
break
if item == what:
return item
And nicer, equivalent function, with return
:
def search(lst, what):
for item in lst:
if item == what:
return item # breaks loop
Read more about simple statements here.
At the instruction level you can see the statements do different things:
return
just returns a value (RETURN_VALUE
) to the caller:
>>> import dis
>>> def x():
... return
...
>>> dis.dis(x)
2 0 LOAD_CONST 0 (None)
3 RETURN_VALUE
break
stops a the current loop (BREAK_LOOP
) and moves on:
>>> def y():
... for i in range(10):
... break
...
>>> dis.dis(y)
2 0 SETUP_LOOP 21 (to 24)
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (10)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 7 (to 23)
16 STORE_FAST 0 (i)
3 19 BREAK_LOOP
20 JUMP_ABSOLUTE 13
>> 23 POP_BLOCK
>> 24 LOAD_CONST 0 (None)
27 RETURN_VALUE