【Python快速上手(十三)】

目录

  • Python快速上手(十三)
    • Python3 lambda函数和装饰器
      • Python3 lambda函数
        • 定义 lambda 匿名函数
        • 使用 lambda 匿名函数
        • 注意事项
      • Python3 装饰器
        • 装饰器的定义
        • 装饰器的用法
        • 装饰器的应用场景
        • 注意事项

Python快速上手(十三)

Python3 lambda函数和装饰器

Python3 lambda函数

在 Python 中,lambda 函数是一种特殊的匿名函数,它允许你快速定义简单的函数而无需使用 def 关键字。lambda 函数通常用于函数式编程范式中,可以作为参数传递给高阶函数或者在需要简单函数时使用。

定义 lambda 匿名函数

lambda 函数的语法形式为:

lambda arguments: expression

其中:

  • lambda 关键字用于声明一个匿名函数。
  • arguments 是函数的参数,可以有多个,也可以没有参数。
  • expression 是一个表达式,用于定义函数的返回值。
使用 lambda 匿名函数

lambda 函数通常与内置函数(如 map()、filter()、sorted()等)或其他高阶函数一起使用。

  1. 作为参数传递给高阶函数
    # 使用 lambda 函数作为 map() 函数的参数
    numbers = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x**2, numbers))
    print(squared)  # 输出: [1, 4, 9, 16, 25]# 使用 lambda 函数作为 sorted() 函数的参数
    names = ["Alice", "Bob", "Charlie", "David"]
    sorted_names = sorted(names, key=lambda x: len(x))
    print(sorted_names)  # 输出: ['Bob', 'Alice', 'David', 'Charlie']
    
  2. 单独调用 lambda 函数
    # 单独调用 lambda 函数
    add = lambda x, y: x + y
    result = add(3, 5)
    print(result)  # 输出: 8
    

特点

  • 匿名性:lambda 函数是匿名的,不需要使用 def 关键字来命名函数。
  • 简洁性:lambda 函数通常只包含一个表达式,语法简洁清晰。
  • 限制性:lambda 函数只能包含单个表达式,不能包含复杂的语句块。
注意事项
  • lambda 函数通常用于定义简单的函数,如果函数逻辑较复杂,建议使用普通的函数定义。
  • 在使用 lambda 函数时要注意代码的可读性,过度使用 lambda 可能会降低代码的可读性。

Python3 装饰器

装饰器(Decorator)是 Python 中一种特殊的语法,用于在不修改原始函数代码的情况下,向函数添加额外的功能或修改其行为。装饰器可以用来包装函数、类方法或静态方法,从而在运行时动态地修改它们的行为。

装饰器的定义

在 Python 中,装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数。通常,装饰器函数会在内部定义一个内嵌函数,并在内嵌函数中对原始函数进行包装、修改或增强。

def decorator(func):def wrapper(*args, **kwargs):# 在调用原始函数之前执行的操作result = func(*args, **kwargs)# 在调用原始函数之后执行的操作return resultreturn wrapper
装饰器的用法

使用装饰器时,可以使用@ 符号将装饰器应用到目标函数上。

@decorator
def target_function(*args, **kwargs):# 目标函数的代码pass
装饰器的应用场景

1. 日志记录

def log(func):def wrapper(*args, **kwargs):print(f"Calling function: {func.__name__}")result = func(*args, **kwargs)print(f"Function result: {result}")return resultreturn wrapper@log
def add(x, y):return x + yadd(3, 5)

2. 性能分析

import timedef timer(func):def wrapper(*args, **kwargs):start_time = time.time()result = func(*args, **kwargs)end_time = time.time()print(f"Execution time: {end_time - start_time} seconds")return resultreturn wrapper@timer
def fibonacci(n):if n <= 1:return nelse:return fibonacci(n-1) + fibonacci(n-2)fibonacci(35)

3. 权限控制

def login_required(func):def wrapper(*args, **kwargs):if user_logged_in():return func(*args, **kwargs)else:return "Login required"return wrapper@login_required
def protected_resource():return "You accessed a protected resource"print(protected_resource())
注意事项
  • 装饰器可以串联使用,一个函数可以应用多个装饰器。
  • 装饰器可以带有参数,这样可以灵活地定制装饰器的行为。
  • 在编写装饰器时,要注意保持原始函数的签名和文档字符串不变,可以使用 functools.wraps 装饰器来解决这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

线性表及其基本运算

线性表是计算机科学中一种重要的数据结构&#xff0c;被广泛应用于各种计算任务中。它定义为一种有序的存储结构&#xff0c;由一系列相同数据类型的元素组成&#xff0c;可以顺序访问和操作&#xff0c;元素可以通过索引来查找和修改。 线性表的具体概念如下&#xff1a; 线…

揭秘Fabric交易流程:一文带你深入了解

随着区块链技术的日益普及&#xff0c;Hyperledger Fabric作为一种联盟链解决方案&#xff0c;受到了广泛关注。那么&#xff0c;Fabric的交易流程究竟是怎样的呢&#xff1f;本文将为您一一揭晓。 1. Fabric交易的参与方 客户端&#xff1a;交易流程的发起方&#xff0c;发起…

Windows 容器镜像踩坑记录

为什么研究windows容器&#xff1f;emm&#xff0c;公司需要&#xff0c;不想多说。 dotnet后端 问题描述&#xff1a; 基于mcr.microsoft.com/dotnet/aspnet:6.0镜像撰写dockerfile编译.net core后端项目后运行容器出现类库不存在问题&#xff1a; 程序中使用了fastreport&a…

数据库(MySQL)—— DQL语句(基本查询和条件查询)

数据库&#xff08;MySQL&#xff09;—— DQL语句&#xff08;基本查询和条件查询&#xff09; 什么是DQL语句基本查询查询多个字段字段设置别名去除重复记录 条件查询语法条件 我们今天进入MySQL的DQL语句的学习&#xff1a; 什么是DQL语句 MySQL中的DQL&#xff08;Data Q…

【论文】关于网页上能打开的文章下载PDF“显示无效或损坏的 PDF 文件”的解决办法

1. 遇到的问题 今天我在 dl.acm.org/doi 下载论文时发现下载后的pdf打开出现“显示无效或损坏的 PDF 文件” 可是在原网址是可以打开并显示的 2. 解决方案 这里我用到了和之前【论文】去除PDF论文行号的完美解决方案 的相似的解决办法 就是下载的时候不直接下载&#xf…

【前端项目——分页器】手写分页器实现(JS / React)

组件介绍 用了两种方式实现&#xff0c;注释详细~ 可能代码写的不够简洁&#xff0c;见谅&#x1f641; 1. 包含内容显示的分页器 网上看了很多实现&#xff0c;很多只有分页器部分&#xff0c;没和内容显示联动。 因此我增加了模拟content的显示&#xff0c;这里模拟了32条数…

环形链表面试题详解

A. 环形链表1 给你一个链表的头节点 head &#xff0c;判断链表中是否有环. 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置…

【ZZULIOJ】1096: 水仙花数(函数专题)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 春天是鲜花的季节&#xff0c;水仙花就是其中最迷人的代表&#xff0c;数学上有个水仙花数&#xff0c;他是这样定义的&#xff1a; “水仙花数”是指一个三位数&#xff0c;它的各位数字的立…

【数据结构】第四讲:双向链表

目录 一、链表的分类 二、双向链表的结构及实现 1.带头双向链表的结构 2.创建节点 3.初始化 4.尾插 5.打印 6.头插 7.尾删 8.头删 9.在pos位置之后插入数据 10.删除pos节点 11.查找 12.销毁 个人主页&#xff1a;深情秋刀鱼-CSDN博客 数据结构专栏&#xff1a;数…

虚拟化技术 安装并配置ESXi服务器系统

安装并配置ESXi服务器系统 一、实验目的与要求 1.掌握创建VMware ESXi虚拟机 2.掌握安装VMware ESXi系统 3.掌握配置VMware ESXi系统的管理IP 4.掌握开启VMware ESXi的shell和ssh功能的方法 二、实验内容 1.安装VMware workstation 15或更高版本 2.创建VMware ESXi虚拟…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 继续接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

基于t972 Android9 AP6256,如何在设置中添加5G热点选项,并使其正常打开

通过设置的的WiFi热点选项可以知道关键词“2.4GHz”&#xff0c;因此可以其全局搜索&#xff0c;在packages\apps\Settings\res\values\strings.xml文件下找到如下图所示&#xff0c; 从上面注释可以知道&#xff0c;选项按键选择2.4GHz触发的按键关键词是“wifi_ap_choose_2G…

✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】

虚拟主机设计 创建 VirtualHost实现构造⽅法和 getter创建交换机删除交换机创建队列删除队列创建绑定删除绑定发布消息 ★路由规则1) 实现 route ⽅法2) 实现 checkRoutingKeyValid3) 实现 checkBindingKeyValid4) 实现 routeTopic5) 匹配规则测试⽤例6) 测试 Router 订阅消息1…

P4_16使用table实现通用的switch分支语句

0 背景 v1.2.1 以及更早版本的P4_16编程语言中&#xff0c;尽管在Control中支持switch分支语句&#xff0c;但是switch中的选择条件是受限的&#xff0c;仅支持 table_name.apply().action_run 作为switch的选择条件。为了解决此限制&#xff0c;将尝试使用P4_16 Tableswitch来…

分布式websocket IM即时通讯聊天开源项目如何启动

前言 自己之前分享了分布式websocket的视频有同学去fork项目了&#xff0c;自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠&#xff0c;消息防重&#xff0c;消息有序。同时基础架构有分布式权限&…

深入教程:在STM32上实现能源管理系统

引言 能源管理系统&#xff08;EMS&#xff09;在提高能源效率、减少能源消耗和支持可持续发展方面起着关键作用。本教程将介绍如何在STM32微控制器上开发一个能源管理系统&#xff0c;这种系统能够监控和控制能源使用&#xff0c;适用于家庭自动化、工业控制系统以及任何需要…

jQuery Moblie 笔记14 开发跨平台移动设备网页

相关内容&#xff1a;jQuery Moblie基础、操作、移动设备仿真器、jQuery Moblie网页实例、jQuery Moblie的UI组件、…… jQuery推出了一套新的函数库jQuery Mobile&#xff0c;目的是希望能够统一当前移动设备的用户界面(UI)。 移动设备开发应用程序目前大致分为两种&#xff…

MLP手写数字识别(3)-使用tf.data.Dataset模块制作模型输入(tensorflow)

1、tensorflow版本查看 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、MNIST数据集下载与预处理 (train_images,train_labels),(test_images,test_labels) tf.keras.datasets.mnist.load_data()…

第IV章-Ⅰ Vue3组件与组件通信

第IV章-Ⅰ Vue3组件与组件通信 Vue组件根组件全局组件局部组件组件模板父子组件 组件间通信子组件获取父组件数据数据传递选项prop传值校验单向数据流 父组件获取子组件数据emit 方法 多级组件通信provide 声明要传递的数据inject 接收数据 总结应用场景单向数据流&#xff08;…