函数的进阶

函数的进阶

匿名函数

  • 匿名函数
"""
语法:
lambda 形参列表: 返回值


相当于
def (形参列表):
    return 返回值
"""

注意: 匿名函数的本质还是函数; 普通函数中的绝大部分内容匿名函数都支持

与一般函数相比, 除了形参类型说明不可用, 其他基本一致

变量作用域

  • 变量作用域 - 变量使用范围

根据变量作用域的不同, 可以将变量分为两种: 全局变量, 局部变量

  • 全局变量
"""
定义在函数或者类外面的变量就是全局变量(没有定义在函数和类里面的变量)
全局变量的作用域: 从定义开始到程序结束
"""
  • 局部变量
"""
定义在函数里面的变量就是局部变量.(形参也是局部变量)
局部变量的作用域: 从定义开始到函数结束
"""
  • global关键字
"""
变量能不能使用, 看的是使用的时候内存中有没有.
定义全局变量的时候, 全局变量保存在全局栈区间, 程序结束后才会被自动释放; 
局部变量保存在函数对应临时栈区间中, 函数调用结束就会被自动释放.


global是函数体中的关键字, 可以在函数体中修饰变量, 让变量在使用和保存的时候都在全局栈区间中进行
1) 函数中修改全局变量的值
2) 直接在函数中定义全局变量
"""
aa = 100
bb = 100


def func2():
    # 不会修改全局变量aa的值, 而是创建一个局部变量的aa
    aa = 200
    print('函数里面aa', aa)         # 函数里面使用的是局部变量aa的值

    # print(bb)                    # 报错! global修改变量必须放在这个变量使用之前
    global bb
    bb += 100                      # 这里使用的是全局变量bb的值, 对全局变量bb进行了修改
    print('里面的bb:', bb)

    global cc                      # 在函数内部定义修改全局变量时使用
    cc = 300


func2()
print('外面的aa:', aa)              # 函数外面使用的是全局变量aa的值
print('外面的bb:', bb)
print('外面的cc:', cc)              # 函数外面使用的是全局变量cc的值

高阶函数

  • 函数就是变量
"""
python中定义函数其实就是在定义一个类型是function的变量, 函数名就是变量名.
变量能做的事情, 函数都可以做
"""
  • 高阶函数 - 实参高阶函数, 返回值高阶函数
  1. 实参高阶函数 - 函数的参数是函数

    应该怎么来确定函数的参数是什么? - 看函数体中这个参数怎么使用

  2. 返回值高阶函数 - 函数的返回值是函数

  • 装饰器

既是实参高阶函数, 又是返回值高阶函数, 还得自己写!

常用的实参高阶函数

  • max, min, sorted, sort - 参数key要求是一个函数

max(序列, key=函数)

"""
max(序列, key=函数) - 按照函数制定的比较规则来获取序列中最大的元素
函数的要求: 1) 参数 - 有且只有一个参数; 这个参数代表前面的序列中的每个元素
           2) 返回值 - 有一个返回值; 返回值就是比较对象
           

注意: 如果一个函数的参数是函数, 这个参数有两种传值方式: a.普通函数的函数名 b.匿名函数
"""
  • map

map(函数, 序列1, 序列2, 序列3, …)

"""
1) map(函数, 序列) - 按照函数指定的规则将原序列转换成新的序列, 返回值是map对象 - 本质是序列
函数的要求: a. 参数: 有且只有1个参数; 参数代表后面的这个序列中的元素
           b. 返回值: 有一个返回值; 返回值就是新序列中的元素


map(函数, 序列1, 序列2)
函数的要求: a. 参数: 有且只有2个参数, 分别代表后面两个序列中的元素
           b. 返回值: 有一个返回值; 返回值就是新序列中的元素


map(函数, 序列1, 序列2, 序列3)
函数的要求: a. 参数: 有且只有3个参数, 分别代表后面3个序列中的元素
           b. 返回值: 有一个返回值; 返回值就是新序列中的元素


map(函数, 序列1, 序列2, 序列3, ...)
"""
  • reduce

注意: reduce在使用之前必须先导入
from functools import reduce

"""
reduce(函数, 序列, 初始值) - 按照函数指定的规则将序列中的所有元素合并成一个数据
函数的要求: 1) 参数: 有且只有两个参数, 第一个参数指向初始值, 第二个参数代表序列中的每个元素
           2) 返回值: 有一个返回值; 描述初始值和元素之间的合并方式
"""
  • filter - 过滤

filter(函数, 序列)

"""
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,
如果要转换为列表,可以使用 list() 来转换。

接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,
然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
"""
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值