遞迴演算法解析
冒泡排序解析
裝飾程式解析
F0 = 0F1 = 1
defth == 5= a1 += defth + 1== recursion(1, 0, 1(ret)
冒泡排序就是一種簡單的排序演算法。他重複的走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
冒泡排序算法的运作如下: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
a = 66b = 88temp = a a = b b = temp
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 # 如果第一个数据大, 则交换数据, 否则, 不做改变 8 if list[i] > list[i + 1]: 9 temp = list[i]10 list[i] = list[i + 1]11 list[i + 1] = temp12 print(list)
def test1():print('日本人.')print(id(test1))def test1():print('中国人.')print(id(test1)) test1() 执行结果:890673481656 890673481792中国人.
(=<function test1 at 0x000000E2D403C7B8> <function test1 at 0x000000E2D403C7B8>
def test1():print('我是',end='')def test2():print('中国人.') test2()def test3(): test1()print('Hello, China.') test3() 结果: 我是中国人. Hello, China.
<1>. 装饰器也是一个函数
<2>. 使用装饰器的格式: 在一个函数前面加上:@装饰器的名字
<1>. 把test1函数当做一个变量传入outer中
func = test1
<2>. 把装饰器嵌套的一个函数inner赋值给test1
test1 = inner
<3>. 当执行test1函数的时候,就等于执行了inner函数,因此在最后的那个test1()命令其实执行的就是inner,因此先输出(你是哪国人)
<4>. 按照执行流执行到func函数的时候,其实执行的就是原来的test1函数,因此接着输出(我是中国人),并把它的返回值返回给了ret
<5>. 当原来的test1函数执行完了之后,继续执行inner里面的命令,因此输出了(Oh,hh, I love China.)
由上面的执行流可以看出来,其实装饰器把之前的函数当做参数传递进去,然后创建了另一个函数用来在原来的函数之前或者之后加上所需要的功能。
(=((
为了装饰器的高可用,一般都会采用下面的方式,也就是无论所用的函数是多少个参数,这个装饰器都可以使用
Python内部会自动的分配他的参数。
# -*- coding:utf-8 -*-# zhou# 2017/6/17def outer(func):def inner(a, *args, **kwargs):print('你是哪国人?') ret = func(a, *args, **kwargs)print('Oh, hh, I love China.')return inner @outerdef test1(a, *args, **kwargs):print('我是中国人.') test1(1)
# -*- coding:utf-8 -*-# zhou# 2017/6/17def outer0(func):def inner():print('Hello, Kitty.') ret = func()print('我是日本人.')return innerdef outer(func):def inner():print('你是哪国人?') ret = func()print('你呢?')return inner @outer0 @outerdef test1():print('我是中国人.') test1() 结果Hello, Kitty. 你是哪国人? 我是中国人. 你呢? 我是日本人.
以上是python系列4的詳細內容。更多資訊請關注PHP中文網其他相關文章!