天天看点

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

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