博学谷Python系列基础语法-4-Python的设计哲学

目录

  • 递归算法解析
  • 冒泡排序解析
  • 装饰器解析
  • 一. 递归1. 递归的定义递归(Recursion),又成为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法 。递归一词还较长用于描述以自相似方法重复事物的过程 。
    F0 = 0F1 = 12. 递归的原理(1). 例题: defth == 5= a1 += defth + 1== recursion(1, 0, 1(ret)
    以下这幅图为整个函数的执行过程,红色的代表一层一层的往里面嵌套,绿色的代表函数的返回值一层一层的外面返还 。其实递归就是这个原理,通过一个函数的执行流在再次进入此函数,当通过一个条件返回一个值之后,一层一层的按照刚刚的执行流再次返回回去,最后得到返回值,但是递归的时候要注意两点:
    1. 他的条件,必须要使他的递归在某个条件内可以返回一个值,否则就会一直递归,直到电脑资源耗尽(Python默认有递归的次数限制)
    2. 返回值,在里面的递归函数一般要给予他一定的返回值,否则在最后一次返还递归的时候会得不到想要的值 。

    博学谷Python系列基础语法-4-Python的设计哲学

    文章插图
    二. 冒泡排序1. 冒泡排序原理冒泡排序就是一种简单的排序算法 。他重复的走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来 。
    冒泡排序算法的运作如下:1. 比较相邻的元素 。如果第一个比第二个大,就交换他们两个 。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对 。这步做完后,最后的元素会是最大的数 。3. 针对所有的元素重复以上的步骤,除了最后一个 。4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较交换数据的原理借助一个外围的变量先保存原来的值,然后再去通过指向地址的转换来进行交换数据 。注意:当temp指向了a, 然后a再指向b的时候,temp本身的指向是没有发生改变的,就如下图,a指向了b,但是temp依然指向的是a的地址,所以他还是66
    a = 66b = 88temp = a a = b b = temp
    博学谷Python系列基础语法-4-Python的设计哲学

    文章插图
    冒泡排序的原理
    博学谷Python系列基础语法-4-Python的设计哲学

    文章插图

     2. 冒泡排序事例 1 # -*- coding:utf-8 -*- 2 # zhou 3 # 2017/6/17 4 list = [0, 88, 99, 33, 22, 11, 1] 5 for j in range(1, len(list)): 6 for i in range(len(list) - j): 7# 如果第一个数据大, 则交换数据, 否则, 不做改变 8if list[i] > list[i + 1]: 9temp = list[i]10list[i] = list[i + 1]11list[i + 1] = temp12 print(list)三. 装饰器1. 装饰器定义装饰器是什么呢?简单来说就是在不改变源函数代码的基础上,对代码的一种微妙的扩展,以使得其功能进一步增强的函数 。装饰器就是一个函数,一个加载在其他函数之上的函数,
    以下我们先来了解几个概念:
    <1>. 函数执行流由以上面的可知,函数的执行流应该是从上到下的,也就是说,代码先把第一个test1加载到内存中,然后从新开辟一块内存来存放第二个test1 。
    这里应该是第一个test1的指向改到了890673481792这里 。
    def test1():print('日本人.')print(id(test1))def test1():print('中国人.')print(id(test1))test1()执行结果:890673481656890673481792中国人.<2>. 函数作为变量由以下结果可以看出来,函数名其实就是一个变量,可以用来传递的变量 。