python中return和break之间有什么区别?

20 python loops function

python中return和break之间有什么区别?请解释一下它们在循环和函数中的确切作用?谢谢

Par*_*ham 25

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()
Run Code Online (Sandbox Code Playgroud)

将产生以下输出

0
1
2
3
Found 3!
Run Code Online (Sandbox Code Playgroud)

运用 return

下面是return在函数根据传入参数计算值后如何使用返回值的示例:

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

s = sum(2, 3)
print s
Run Code Online (Sandbox Code Playgroud)

输出:

5
Run Code Online (Sandbox Code Playgroud)

比较两者

现在,在第一个例子中,如果在循环之后没有发生任何事情,我们也可以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()
Run Code Online (Sandbox Code Playgroud)

产量

0
1
2
3
Run Code Online (Sandbox Code Playgroud)


Reu*_*ani 13

break用于结束循环,同时return用于结束函数(并返回一个值).

还有continue一种方法可以在不完成当前迭代的情况下进行下一次迭代.

return有时可以循环时稍微用作休息,一个例子是一个简单的搜索功能来搜索whatlst:

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

    if item == what:
        return item
Run Code Online (Sandbox Code Playgroud)

更好,等效的功能,return:

def search(lst, what):
    for item in lst:
        if item == what:
            return item # breaks loop
Run Code Online (Sandbox Code Playgroud)

了解更多关于简单的语句在这里.

在指令级别,您可以看到语句执行不同的操作:

return只返回一个值(RETURN_VALUE)给调用者:

    >>> import dis
    >>> def x():
    ...     return
    ... 
    >>> dis.dis(x)
      2           0 LOAD_CONST               0 (None)
                  3 RETURN_VALUE        
Run Code Online (Sandbox Code Playgroud)

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  
Run Code Online (Sandbox Code Playgroud)


Pau*_* Lo 5

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'   
Run Code Online (Sandbox Code Playgroud)