Python - 函数复习 & 冒泡排序 & 递归 & 装饰器

一、函数作为参数

#### 例1
def f1():
    print('F1被执行')

def f2(arg):
    arg()    #f1 = arg 当f1被作为参数传进来的时候,arg() 就相当于f1()也就是调用了f1函数
    return 'F2被执行'

ret = f2(f1)  #f1不加括号时,代指函数,
print(ret)

#### 例2
def Myfilter(founc,li):
    result = []
    for i in li:
        ret = founc(i)        #由于执行函数的时候传的是f1,这里执行f1函数,返回的值赋给ret
        if ret:               
            result.append(i)   
    return result

def f1(x):
    return True if x > 22 else False   #当执行到founc(i)的时候,调用函数f1,并判断x(也就是i)的值

r = Myfilter(f1,[11,22,33,44])     #执行函数Myfilter并返回值赋值给r
print(r)

二、冒泡排序

利用一个中间值,讲两个数值交换
li  = [11,22,33,44,55]
temp = li[1]  #temp = 22
li[1] = li[2] #li[1] =33
li[2] = temp  #li[2] = temp = 22 
print(li)     #[11,33,22,44,55]


li = [33,2,10,1]
for j in range(1,len(li)):
    for i in range(len(li)-j):   #逐渐减少次数
        if li[i] > li[i + 1]:    #每循环一次判断两个值的大小,交换位置
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
print(li)                        #[1, 2, 10, 33]

三、递归

#不是递归,递归执行步骤
def f1():       
    return 'f1' #第五步执行f1函数,得到返回值f1,将其返回给调用他的函数

def f2():       #第四步当f2函数执行的时候,内部执行f1函数
    r = f1()    #第六步,收到f1的返回值,并返回
    return r

def f3():       #第三步当f3函数执行的时候,内部执行f2函数
    r = f2()    #第七步,收到f2的返回值,并返回
    return r

def f4():       #第二步当f4函数执行的时候,内部执行f3函数
    r = f3()    #第八步,收到f3的返回值,并返回给f4 
    return r

ret = f4()      #第一步执行f4函数,返回值赋给ret
print(ret)      #第九步,打印收到的返回值
# #递归,在函数中调用自身
def func(a1, a2):
    print(a1)
    a3 = a1 + a2    
    func(a2,a3)     

func(0,1)
#用递归获取 菲波那契数列 第10个返回值
def func(num, x, y):
    if num == 10:
        return x
    z = x + y
    r = func(num + 1, y, z)  

ret = func(1,0,1)
print(ret)

四、装饰器初识

def outer(func):
    r = func()  #f1被作为参数传递过来,等于func,这里执行f1
    return r

@outer  #执行outer函数,将下面的函数作为参数,传给outer函数
def f1():
    print('f1')

评论

此博客中的热门博文

Skype 常用命令

三星xpress M2070W 如何连接 WiFi

Python - shutil 模块