python函数的使用

python函数的使用

制作人:全心全意

函数的定义

def 函数名(参数):
    函数体

 

参数的使用

def 函数名(a):
    函数体
                    
函数名(5)

  默认函数

def 函数名(a=5):
    函数体
            
函数名(4)
函数名()

  元组函数

def 函数名(a,b=5,*c):
    函数体
            
函数名(1,2,3,4,5)

  关键字函数

def 函数名(a,b=5,*c,**d):
    函数体
            
函数名(1,2,3,4,5,t1=6,t2=7)

 

元组和关键字分解传参

  元组函数

def 函数名(a,b,c,d):
    函数体
            
tt = (1,2,3,4)
函数名(*tt)

  关键字函数

def 函数名(a,b,c):
    函数体
            
tt = {"a":3,"b":4,"c":5}
函数名(**tt)

 

如果默认值参数使用的是列表之类的可变数据类型,那么会在多次调用之间共享默认值

def 函数名(b,a=[0]):
    a[0] += 1
    res = b + a[0]
    print(res)

函数名(1)        #2
函数名(1)        #3

 

闭包函数

def myfun(a):
    def mynest(b):
        return a + b
    return mynest

f = myfun(10)
print(f(20))    #30     

  注意示例一:

def myfun():
    lists = []
    for i in range(0,3):
        def mynest(b):
            return i + b  #i的值为myfun执行完后的值2
    lists.append(mynest)
    return  lists
funcs = myfun()
print(funcs[0](10))    #12
print(funcs[1](10))    #12
print(funcs[2](10))    #12    

  注意示例二:(使用默认值参数)

def myfun():
    lists = []
    for i in range(0,3):
        def mynest(b,i=i):
            return i + b    #i有默认固定的值
        lists.append(mynest)
    return  lists
funcs = myfun()
print(funcs[0](10))    #10
print(funcs[1](10))    #11
print(funcs[2](10))    #12

 

递归函数

def myfun(num):
    print("*"*num)
    if num <= 0:
        return
    myfun(num - 1)
myfun(20)

 

高阶函数

def myfun(func,string):
    func(string)

def myprint1(string):
    print(string)

def myprint2(string):
    print(string * 2)

myfun(myprint1,"nihao")        #nihao
myfun(myprint2,"nihao")        #nihaonihao

 

lambda函数

  lambda只能包含一个表达式

a = lambda x,y:x+y
print(a(2,3))
        
def myfun(func,string):
    func(string)
myfun(lambda x:print(x*3),"nihao")

  使用lambda创建一个排序函数

def mysort(func,lists):
    for i in range(0,len(lists)):
        for n in range(i,len(lists)):
            if func(lists[i],lists[n]):
                lists[i],lists[n] = lists[n],lists[i]
    return lists

lists = [3,5,9,7,9,8,10]

print(mysort(lambda x,y:True if x > y else False,lists))
print(mysort(lambda x,y:True if x < y else False,lists))

 

函数装饰器的使用

装饰器的作用是先将传递的参数使用装饰器进行检查

以DEBUG和登录为例:

DEBUG = True
def decorator_1(func):
    print("调试装饰器")
    def decorator_nest(*args,**kew):
        print("开始调试")
        print("*"*40)
        print(args,kew)
        return func(*args,**kew)
    if DEBUG:
        return decorator_nest
    else:
        return func

def login_required(func):
    def decorator_nest(*args,**kew):
        print("登录装饰器")
        if "userid" not in kew:
            print("尚未登录,禁止访问")
            return None
        else:
            print("欢迎回来^_^")
            return func(*args,**kew)
    return decorator_nest

@login_required
@decorator_1
def myfun(*args,**kew):
    print(111)

myfun("nihao","hello","hi",userid=10)

 

posted @ 2020-02-25 15:39  全心全意_运维  阅读(191)  评论(0编辑  收藏  举报