二十、冒泡算法,递归,装饰器
1.冒泡算法
l1=[33,2,10,1,565,23,333,898,4,21,65,45,75,33,11,77,333]
for j in range(1,len(l1)):
#print (j)
for i in range(len(l1) - j):
if l1[i] > l1[i + 1]:
temp = l1[i]
l1[i] = l1[i + 1]
l1[i + 1] = temp
print(l1)
---------------------------
[1, 2, 4, 10, 11, 21, 23, 33, 33, 45, 65, 75, 77, 333, 333, 565, 898]
-------------------------------------------------------------------------------------------
2.递归
#获取斐波那契数列第10个数
def f5(depth,a1,a2):
#print (depth)
if depth == 10:
return a1
a3=a1+a2
r=f5(depth+1,a2,a3)
return r
m=f5(1,0,1)
print (m)
-------------------------------------------------------------------------------------------
3.装饰器:为了不改变原函数的情况下,在执行该函数之前或者之后执行一些东西
只要函数应用装饰器,那么函数就被重新定义,重新定义为装饰器内容函数
def outer(func):
#func=f1()
def inner():
print ("hello")
print("hello")
print("hello")
#执行旧的f1函数,r为None
r=func()
print("end")
print("end")
print("end")
return r
return inner
#f1新=inner()
@outer
'''
1.到@时,执行outer函数,并且将下面的函数名当做参数
2.将outer的返回值重新赋值给f1,f1=outer的返回值
'''
def f1():
print ("F1")
def f2():
print ("F2")
def f3():
print ("F3")
def f4():
print ("F4")
f1()
------------------------------------------------
hello
hello
hello
F1
end
end
end
------------------------------------------------------------------------------------------------------------
如果加上一个参数
def outer(func):
#func=f1()
def inner(x,y):
print ("hello")
print("hello")
print("hello")
#执行旧的f1函数,r为None
r=func(x,y)
print("end")
print("end")
print("end")
return r
return inner
#f1新=inner()
'''
1.到@时,执行outer函数,并且将下面的函数名当做参数
2.将outer的返回值重新赋值给f1,f1=outer的返回值
'''
@outer
def f1(a1,a2):
print ("F1")
return a1+a2
def f2():
print ("F2")
def f3():
print ("F3")
def f4():
print ("F4")
f1(1,2)
---------------------------------------
hello
hello
hello
F1
end
end
end
------------------------------------------------------------------------------------------------------------
如果加上多个参数,每个函数参数不一样,万能装饰器
def outer(func):
#func=f1()
def inner(*x,**y):
print ("hello")
print("hello")
print("hello")
#执行旧的f1函数,r为None
r=func(*x,**y)
print("end")
print("end")
print("end")
return r
return inner
#f1新=inner()
'''
1.到@时,执行outer函数,并且将下面的函数名当做参数
2.将outer的返回值重新赋值给f1,f1=outer的返回值
'''
@outer
def f1(a1,a2):
print ("F1")
return a1+a2
@outer
def f2(a):
print ("F2")
@outer
def f3(a,b,c):
print ("F3")
def f4():
print ("F4")
# f5=outer(f1)
# print (f5)
# result=f5()
# print (result)
f1(1,2)
f2(1)
f3(1,1,1)
------------------------------------
hello
hello
hello
F1
end
end
end
hello
hello
hello
F2
end
end
end
hello
hello
hello
F3
end
end
end
------------------------------------------------------------------------------------------------------------
多个装饰器修饰一个函数:
def outer(func):
#func=f1()
def inner(*x,**y):
print ("123")
#执行旧的f1函数,r为None
r=func(*x,**y)
print("456")
return r
return inner
#f1新=inner()
def outer_a(func):
#func=f1()
def inner(*x,**y):
print ("666")
#执行旧的f1函数,r为None
r=func(*x,**y)
print("888")
return r
return inner
'''
1.到@时,执行outer函数,并且将下面的函数名当做参数
2.将outer的返回值重新赋值给f1,f1=outer的返回值
'''
@outer_a
@outer
def f1(a1,a2):
print ("F1")
return a1+a2
#@outer
def f2(a):
print ("F2")
#@outer
def f3(a,b,c):
print ("F3")
def f4():
print ("F4")
f1(1,2)
-----------------------------------------
666
123
F1
456
888
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。