в чем разница между return и break в python?

в чем разница между return и break в python? Пожалуйста, объясните, что именно они делают в циклах и функциях? спасибо

5 ответов


break используется, чтобы завершить цикл досрочно, а return - ключевое слово, используемое для передачи возвращаемого значения вызывающему объекту функции. Если он используется без аргумента, он просто завершает функцию и возвращается туда, где код выполнялся ранее.

есть ситуации, где они могут выполнять ту же цель, но вот два примера, чтобы дать вам представление о том, что они используются для

используя break

итерация по списку значения и нарушение, когда мы видели число 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()

произведет следующий выход

0
1
2
3
Found 3!

используя return

вот пример return используется для возврата значения после того, как функция вычислит значение на основе входящих параметров:

def sum(a, b):
    return a+b

s = sum(2, 3)
print s

выход:

5

сравнение двух

теперь, в первом примере, если после цикла ничего не происходило, мы с таким же успехом можно было использовать return и" выскочил " из функции немедленно. Сравните вывод с первым примером, когда мы используем return вместо 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()

выход

0
1
2
3

break используется, чтобы конец петли, а return используется для завершения функции (и возврата значения).

есть еще continue как средство для перехода к следующей итерации без завершения текущей.

return иногда может использоваться как перерыв при циклировании, примером может быть простая функция поиска для поиска what на lst:

def search(lst, what):
    for item in lst:
        if item == what:
            break

    if item == what:
        return item

и более приятная, эквивалентная функция, с return:

def search(lst, what):
    for item in lst:
        if item == what:
            return item # breaks loop

подробнее о простых заявлениях здесь.

на уровне инструкций вы можете видеть, что операторы делают разные вещи:

return просто возвращает значение (RETURN_VALUE) для абонента:

    >>> import dis
    >>> def x():
    ...     return
    ... 
    >>> dis.dis(x)
      2           0 LOAD_CONST               0 (None)
                  3 RETURN_VALUE        

break останавливает текущий цикл (BREAK_LOOP) и двигается дальше:

>>> 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  

return завершит всю функцию, пока break просто сделать вас закончить цикл

пример:

def test_return()
    for i in xrange(3):
        if i==1:
            print i
            return i
    print 'not able to reach here'


def test_break()
    for i in xrange(3):
        if i==1:
            print i
            break
    print 'able to reach here'

test_return()  # print:  0 1
test_break()  # print:  0 1 'able to reach here'   

Return выйдет из определения в точной точке его вызова, передавая переменную после нее непосредственно из определения. Разрыв приведет только к концу цикла, в котором он находится.

def Foo():
    return 6
    print("This never gets printed")

bar = Foo()

это сделает бар равным шести. Код после инструкции return никогда не будет запущен.

перерыв пример:

def Loop():
    while True:
        print("Hi")
        break

Loop()

это будет печатать только один раз, так как оператор break вызовет конец бесконечного цикл while.


давайте рассмотрим пример:

def f(x, y):
    n = 0
    for n in range(x, y):
         if not n % 2: continue
         elif not n % 3: break
    return n
print((f(1, 10)))

это выводит 3. Почему? Давайте пройдемся по программе:

def f(x, y):

определить функцию

    n = None

установите переменную ' n ' в None

    for n in range(x, y):

начните итерацию с " x " на "y". в нашем случае с первого по девятый

         if not n % 2: continue

прекратите эту итерацию, если "n" равномерно делится на два

         elif not n % 3: break

оставьте эту итерацию, если N делится на три

    return n

наша функция ' f '"возвращает" значение 'n'

print((f(1, 10)))

' f(1, 10) 'печатает три, потому что он оценивает как "n", как только выполнение покидает область действия функции