二十、冒泡算法,递归,装饰器

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

posted @ 2018-07-28 15:26  旅行没有终点  阅读(169)  评论(0编辑  收藏  举报