函數的冒泡排序: 本質是,讓元素換位置,逐個比較最終排序。 例1:實現a1,a2值互換: 冒泡排序: 遞歸: 在函數內部可以調用其他函數。如果一個函數在內部調用自己,這個函數就是遞歸函數。 例: 函數裝飾器: 裝飾器的目的:當要修改一段代碼時,而不進行內部的修改,這就需要在外部加裝飾器來達到效果。 ...
函數的冒泡排序:
本質是,讓元素換位置,逐個比較最終排序。
例1:實現a1,a2值互換:
a1 = 123 a2 = 456 temp = a1 a1 = a2 a2 = temp print(a1) print(a2) 結果: 456 123
冒泡排序:
#!/bin/bash/env python # -*- coding:utf-8 -*- li = [22,1,5,4,3,66,22,12,34,21] for j in range(1,len(li)): for i in range(len(li)-1): if li[i] > li[i+1]: temp = li[i] li[i] = li[i+1] li[i+1] = temp print(li) 結果: [1, 3, 4, 5, 12, 21, 22, 22, 34, 66]
遞歸:
在函數內部可以調用其他函數。如果一個函數在內部調用自己,這個函數就是遞歸函數。
例:
#!/bin/bash/env python def f4(a1,a2): if a1 > 10000: return print(a1) a3 = a1 + a2 f4(a2,a3) f4(0,1) 結果: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
函數裝飾器:
裝飾器的目的:當要修改一段代碼時,而不進行內部的修改,這就需要在外部加裝飾器來達到效果。
原函數執行之前進行的操作:
#!/bin/bash/env python def outer(func): def inner(): print('hello') print('let is') print('moumou') r = func() return r return inner @outer def func1(): print('yes') func1() 結果: hello let is moumou yes
函數執行之後進行操作:
def outer(func): def inner(): r = func() print('hello') print('let is') print('moumou') return r return inner @outer def func1(): print('yes') func1() 結果: yes hello let is moumou
@的功能:先執行outer函數,然後把發f1當做參數傳給oute。, 將outer的返回值重新賦值給f1,所以f1的函數就等於inner()
只要函數應用裝飾器,那麼函數就被重新定義,重新定義為:裝飾器的內層函數。
多個參數裝飾器傳遞:
#!/bin/bash/env python def outer(func): def inner(*args,**kwargs): print(args) print(kwargs) ret = func(*args,**kwargs) return ret return inner @outer def func1(a1,a2,a3): print("yes") return a1 + a2 +a3 func1(11,22,33) 結果: (11, 22, 33) {} yes
多個裝飾器的應用:
#!/bin/bash/env python def outer(func): def inner(*args,**kwargs): print('cai') ret = func(*args,**kwargs) print('rui') return ret return inner def outer1(func): def inner1(*args,**kwargs): print('123') ret = func(*args,**kwargs) return ret return inner1 @outer1 @outer def func1(a1,a2,a3): print("yes") func1(11,22,33) 結果: 123 cai yes rui
分析:
先把outer和func1看做一個整體,把inner放在outer1中執行,然後再執行下麵的