python基础之基本算法和装饰器
1、冒泡排序
关于冒泡排序实现大小比较,大索引会向后移动,这次循环将最大数值直接移动至最后。
li = [125,56,78,23,] 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) [56, 78, 23, 125]
冒泡排序以函数的方式完整的实现方法
def my_min(a):
c = len(a)
while c > 1:
for i in range(len(a) - 1):
if a[i] > a[i + 1]:
temp = a[i]
a[i] = a[i + 1]
a[i + 1] = temp
c -= 1
print(a)
b = [23,25,12,14,4,]
my_min(b)
[4, 12, 14, 23, 25]
2、递归
斐波那契数列根据递归的方法实现方式,因为无线循环的递归会报错,这里我们做个限制
def f1(a1,a2): if a1 >1000: return print(a1) a3 = a1 + a2 f1(a2,a3) f1(0,1) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
以递归的方式获取菲波那切数列第十个数字的代码实现方式
def f5(de,a1,a2): if de == 10: return a1 a3 = a1 +a2 r = f5(de + 1,a2,a3) return r print(f5(1,0,1)) 34
3、装饰器,用于装饰某个方法、函数,对象或者类
下边我们给一个简单的函数加一个简单的装饰器
def out(func): def inner(): print("hello") r = func() return r return inner @out def f1(): print("f1") f1() hello f1
@符号在这里有特殊的含义,@函数名,会执行该函数,并且会将这行下边的函数名当做参数传入该函数,并将out的返回值重新赋值给f1
双参数的装饰器写法
def out(func): def inner(a,b): print("hello") r = func(a,b) return r return inner @out def f1(a,b): print("f1") print(a + b) f1(1,2) hello f1 3
函数含有多个参数的装饰器的写法
def out(func): def inner(*arg,**kwargs): print("hello") r = func(*arg,**kwargs) return r return inner @out def f1(a,b): print("f1") print(a + b) f1(1,2) hello f1 3
多个装饰器装饰一个函数的写法
def out(func): def inner(*arg,**kwargs): print("hello") r = func(*arg,**kwargs) return r return inner def out1(func): def inner(*arg,**kwargs): print("heh") r = func(*arg,**kwargs) return r return inner @out @out1 def f1(a,b): print("f1") print(a + b) f1(1,2) hello heh f1 3