return在函数中多次循环调用本函数返回的特殊情况(PYTHON)

        网上查阅了大量相关return在函数当中返回时的返回时返回的位置情况,查找到的都是return像for循环当中的break一样直接跳出的情况一样,直接跳出函数;其中不同的是return在返回的时候一并将return后的值一并返回给了函数。

        针对我标题所说到的return在函数中多次循环本身函数返回时的特殊情况的问题,今天就拿归并排序的算法进行介绍,先给代码:

【注】此下为pycharm集成开发环境当中运行的情况,如果不同转成pycharm下运行或随时可以联系我

# array = [38,27,43,3,9,89,64,10]
def merge_sort(array,verbose=True):
    """归并排序函数"""

    if len(array) <= 1:
        return array
    mid = int(len(array)/2)
    left = array[0:mid]
    right = array[mid:]
    if verbose is True:
        print("break array {0} into subarray of {1} and {2}".format(array, left, right))
    left_sorted = merge_sort(left)
    right_sorted = merge_sort(right)
    left_ptr = 0
    right_ptr = 0
    merge_array = []
    while left_ptr < len(left_sorted) and right_ptr < len(right_sorted):
        if left_sorted[left_ptr] <= right_sorted[right_ptr]:
            merge_array.append(left_sorted[left_ptr])
            left_ptr += 1
        else:
            merge_array.append(right_sorted[right_ptr])
            right_ptr += 1
        if left_ptr >= len(left_sorted):
            merge_array.extend(right_sorted[right_ptr:])
            break
        elif right_ptr >= len(right_sorted):
            merge_array.extend(left_sorted[left_ptr:])
            break
    if verbose is True:
        print("merge array {0} and {1} into array 
               {2}".format(left_sorted,right_sorted,merge_array))
    return merge_array


# --函数测试执行--

array = [38,27,43,3,9,89,64,10]
arr_sorted = merge_sort(array)
print(arr_sorted)

运行结果展示:

[38, 27, 43, 3, 9, 89, 64, 10]
break array [38, 27, 43, 3, 9, 89, 64, 10] into subarray of [38, 27, 43, 3] and [9, 89, 64, 10]
break array [38, 27, 43, 3] into subarray of [38, 27] and [43, 3]
break array [38, 27] into subarray of [38] and [27]
merge array [38] and [27] into array [27, 38]
break array [43, 3] into subarray of [43] and [3]
merge array [43] and [3] into array [3, 43]
merge array [27, 38] and [3, 43] into array [3, 27, 38, 43]
break array [9, 89, 64, 10] into subarray of [9, 89] and [64, 10]
break array [9, 89] into subarray of [9] and [89]
merge array [9] and [89] into array [9, 89]
break array [64, 10] into subarray of [64] and [10]
merge array [64] and [10] into array [10, 64]
merge array [9, 89] and [10, 64] into array [9, 10, 64, 89]
merge array [3, 27, 38, 43] and [9, 10, 64, 89] into array [3, 9, 10, 27, 38, 43, 64, 89]
[3, 9, 10, 27, 38, 43, 64, 89]

进程已结束,退出代码为 0

        此函数当中只有一个return,执行的过程当中却执行了很多的print命令,从结果上可以很明显的看出代码执行的顺序问题,通过调试可以清楚的了解每一步执行的具体过程。

        通过这个代码分析可知,在return返回的时候遵循一种二叉树的执行过程,即分解前与分解后都按照二叉树的执行结果,即呈现层级的返回执行。先执行左侧分支,再执行右侧分支,当大分支左侧一层执行完成就会向上递增执行,之后再从右侧分支底层递增去执行,而return的返回结果即按照这个方式进行分支调用位置的函数跳出与返回。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值