继续整理python------函数

103 阅读4分钟

一、简介

函数就是把重复的代码,封装到一起。后续使用时,直接找函数。可以增加代码的模块化和提高代码的重复利用率。

二、定义函数

格式:

def 函数名([参数1,参数2,...]):
    函数体(重复的代码)

注意:

1、必须使用关键字def

2、函数体注意缩进

3、函数名()绑定

三、命名规范

与字符串命名类似。

四、调用

调用:函数名()

注意:有参数要传参数

五、形参与实参

形参:形式上的参数

实参:实际的参数,具体的值

六、可变参数 *args

拆包和装包

参数有可变参数和不可变参数时,可变参数要放在最后。

七、关键字参数和默认值参数

默认值参数:key = value

给函数一个默认值。

关键字参数:**kwargs

默认转成字典保存。

八、返回值 return

返回值:把需要返回的结果,用return抛出来

1、return后面可以是一个参数

2、return后面也可以是多个参数,如果有多个,会存放到一个元组里返回

3、接收的时候也可以多个

九、全局变量和局部变量

1、全局变量global

2、局部变量仅限于函数内部使用。

3、全局变量如果是不可变在函数中进行修改需要添加global关键字,如果是可变的,在函数中修改时不需要添加global。

十、内部函数

特点:

1、可以访问外部函数的变量

2、内部函数可以修改外部函数的可变类型的变量

3、内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名

4、内部函数修改外部函数的不可变的变量时,需要在内部函数声明nonlocal 变量名

5、使用locals()内置函数进行查看,可以看到当前外部函数里声明的内容,返回的是一个字典

6、使用globals()查看全局变量有哪些,返回的是一个字典

十一、闭包

在函数中提出的概念。

条件:

1、外部函数中定义了内部函数

2、外部函数是有返回值

3、返回值是内部函数名,务必不能加括号(加了括号就是调用了函数)

4、内部函数引用了外部函数的变量值

格式:

def 外部函数():
    xxx
    def 内部函数():
       xxx
    return 内部函数

缺点:

1、作用域没有那么直观

2、因为变量不会被垃圾回收,所以有一定的内存占用问题

作用:

1、可以使用同级的作用域

2、读取其他元素的内部变量

3、延长作用域

总结:

1、闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成

2、由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

3、闭包的好处,使代码变得简洁,便于阅读代码

4、闭包是理解装饰器的基础

十二、装饰器

1、用法:@函数名

2、步骤:

a、装饰器下的函数被称为被装饰函数

b、被装饰器函数会作为参数传给装饰器函数

c、执行装饰器函数,将返回值传给被装饰函数,实际是闭包里的内部函数

3、万能装饰器,就是传参是传*args,**kwargs

4、有多层装饰器时,优先执行离被装饰函数近的装饰器

5、装饰器传参,只要带参数的,装饰器就装了三层;不带参数的装饰器,就是两层

# 第一层
def outer(a):
    # 第二层
    def decorate(func):
        # 第三层
        def wrapper(*args,**kwargs):
            func(*args)
            xxx
        return wrapper
    return decorate

十三、匿名函数

作用:简化函数定义

格式:lambda 参数1, 参数2 :运算

s = lambda a,b:a+b

#调用
s(1,2)

特点:

1、匿名函数可以作为参数出现

# 求最大值  
list2 = [{'a':19,'b':20},{'a':222,'b':21},{'a':32,'b':32},{'a':214,'b':21}]  
  
s = max(list2,key=lambda x:x['a'])  
print(s)  
  
# 求最小值 min

# 对列表进行操作的map
list1 = [1,2,3,4,2,4,6,7,8,2]  
s = map(lambda x:x+1,list1)  
print(list(s))  
  
# lambda的if,对列表的奇数进行+1  
res =map(lambda x : x if x%2==0 else x+1,list1)  
print(list(res))

十四、内置函数

filter()、sorted()、reduce()

reduce()函数,对列表中的元素进行加减乘除运算的函数

from functools import reduce
tuple1 = (3,4,5,6,7,8)
# 加法
reduce(lambda x,y:x+y,tuple1,初始值)
# 减法、乘法、除法等类似

filter()函数,过滤作用

list1 = [1,2,3,22,1,21,32]
s = filter(lambda x:x>10,list1)
print(list(s))

sorted()函数

s = sorted(list1,key=lambda x:x,reverse=True)

十五、递归函数

普通函数的一种表现形式,简单的话就是函数自己调用自己。

特点:

1、递归函数务必要设定终点

2、通常都会有一个入口

def sum(n):
    if n == 0;
        return 0
    else:
        return n+sum(n-1)