Python学习第十八天

本文介绍了Python的高阶函数,包括map、filter、sorted、max、min的使用,接着讲解了nonlocal语句的作用和语法。接着深入探讨了闭包的概念、语法和优缺点,以及它们在实现Python装饰器中的应用。最后,详细阐述了函数装饰器的定义、语法,并解释了装饰器链的工作原理,还提供了多个练习题供读者实践。
摘要由CSDN通过智能技术生成
"""
    编程范式
        面向过程
            考虑问题从步骤(细节/实现)出发
            先做 -- 后用

        面向对象 - 架构
            封装: 分  -- 多个类        [先用]
                老张   (思想层面:汽车   火车...)
            继承: 隔 -- 父类          ------
                交通工具
            多态:做 -- 子类重写        [后做]
                汽车   火车

        函数式编程: - 功能
            "封装": 分 -- 多个函数     [先用]
               通用函数  (思想层面:姓名是xx的员工  编号是xx的员工...)
            "继承": 隔 -- 参数        ------
                func
            "多态":做 -- lambda      [后做]
                姓名是xx的员工   编号是xx的员工
"""

内置高阶函数
1. map(函数,可迭代对象):使用可迭代对象中的每个元素调用函数,将返回值作为新可迭代对象元素;返回值为新可迭代对象。
2. filter(函数,可迭代对象):根据条件筛选可迭代对象中的元素,返回值为新可迭代对象。
3. sorted(可迭代对象,key = 函数,reverse = bool值):排序,返回值为排序结果。
4. max(可迭代对象,key = 函数):根据函数获取可迭代对象的最大值。
5. min(可迭代对象,key = 函数):根据函数获取可迭代对象的最小值。

"""
    内置高阶函数
"""
from common.iterable_tools import IterableHelper


class EmployeeModel:
    def __init__(self, eid=0, did=0, name="", money=0.0):
        self.eid = eid
        self.did = did
        self.name = name
        self.money = money


list_employee = [
    EmployeeModel(1001, 9003, "林玉玲", 13000),
    EmployeeModel(1002, 9005, "王荆轲", 16000),
    EmployeeModel(1003, 9003, "刘岳浩", 11000),
    EmployeeModel(1004, 9007, "冯舜禹", 17000),
    EmployeeModel(1005, 9005, "曹海欧", 15000),
    EmployeeModel(1006, 9005, "魏鑫珑", 12000),
]

# 1. map : 映射
# map(func,iterable) -> 生成器
for item in map(lambda item: item.name, list_employee):
    print(item)

# for item in IterableHelper.select(list_employee,lambda item:item.name):
#     print(item)

# 2.filter:过滤
# filter(func,iterable) -> 生成器
for item in filter(lambda emp: emp.money > 15000, list_employee):
    print(item.__dict__)

# for item in IterableHelper.find_all(list_employee,lambda emp:emp.money > 15000):
#     print(item.__dict__)

# 3.max  4.min : 最大最小
#  极值 = max(容器, key=函数)
max_emp = max(list_employee, key=lambda item: item.money)
print(max_emp.__dict__)

# max_emp =IterableHelper.get_max(list_employee,lambda item:item.money)
# print(max_emp.__dict__)

# 5. 排序
# -- 升序
#  排序结果 = sorted(容器, key=函数)
result = sorted(list_employee, key=lambda e: e.money)
print(result)

# IterableHelper.ascending_order(list_employee,lambda e:e.money)
# print(list_employee)

# -- 降序
#  排序结果 = sorted(容器, key=函数, reverse=True)
result = sorted(list_employee, key=lambda e: e.money, reverse=True)
print(result)

nonlocal 语句
1. 作用:
在内层函数修改外层嵌套函数内的变量
2. 语法
nonlocal 变量名1,变量名2, …
3. 说明
在被嵌套的内函数中进行使用

"""
    函数作用域
        - 外部嵌套作用域 语法
         # 内部函数可以访问外部函数变量
         # 如果修改外部函数变量,必须通过nonlocal声明
"""
# 外部函数
def func01():
    # 局部变量:对文件而言
    # 外部嵌套变量:对func02而言
    a = 10

    # 内部函数
    def func02():
        # 内部函数可以访问外部函数变量
        print(a)

    func02()

# 调用外部函数(内部函数不执行)
func01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值