当前位置: 首页 > news >正文

python进阶编程

lambda匿名函数

python使用lambda表达式来创建匿名函数

语法

// lambda 参数们:对参数的处理
lambda x : 2 * x
// x 是参数, 2*x 是返回值
​
//使用lambda实现求和
sum = lambda arg1, arg2 : agr1 + arg2
print(sum(10,20))
​
// 将匿名函数封装在一个函数里面,可以用同样的代码来创建多个匿名函数
def myfunc(n):return lambda a : a * n
mydoubler myfunc(2)
mytripler myfunc(3)
print(mydoubler(11)) // 2 * 11
print(mytripler(11)) // 3 * 11

lambda函数不能访问自己的参数列表以外或者全局命名空间里面的参数

lambda的主体是一个表达式而不是代码块,仅仅能封装有限的逻辑进去

推导式

【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)详解_一个写湿的程序猿的博客-CSDN博客

  • 列表推导式

    [表达式 for 变量 in 列表]
    或者
    [表达式 for 变量 in 列表 if 条件]
    [out_exp_res for out_exp in input_list if condition]
    ​
    // 例子
    l = [1,2,3]
    [print(item) for item in l if item > 1]
  • 字典推导式

    {key_expr:value_expr for value in colletion if conditon}
    key_expr:新key生成表达式,可以是有返回值的函数
    value_expr:新value生成表达式,可以是有返回值的函数
    for value in colletion if conditon:迭代colletion中满足条件的value传入到key_expr:value_expr中
  • 集合推导式

    {expression for item in Sequence if condition}
    expression:新元素生成表达式,可以是有返回值的函数体
    for item in Sequence if condition:将满足条件的Sequence迭代传入expression表达式
  • 元组表达式【生成器表达式】

    元组推导式可以利用range区间,元组,列表,字典和集合等数据类型,快速生成一个满足指定要求的元组

    (expression for item in Sequence if condition)
    expression:新元素生成表达式,可以是有返回值的函数体
    for item in Sequence if condition:将满足条件的Sequence迭代传入expression表达式

enumerate内建函数

enumerate()函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标

enumerate(sequence,[start=0])

  • sequence为一个序列,迭代器,或者其它支持迭代对象,返回的是一个enumerate对象

  • 通过enumerate对象的遍历,可以获得索引于数据的组合对

    list = ['1','2','3','4']
    for index, value in enumerate(list):print(f'第{index},{value}')
    # 结果如下
    第0,1
    第1,2
    第2,3
    第3,4    

迭代器与生成器

  • 迭代器是访问集合元素的一种方式,迭代器特征为:

    1. 是一个可以记住遍历位置的对象

    2. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前而不会后退

    3. 迭代器有两个基本方法:iter()和next(),字符串,列表,元组都可以用于创建迭代器

    4. 迭代器对象可以用for进行遍历,也可以使用next()函数来获取下一个值

    list = ['1','2','3','4']
    ​
    my_iterator = iter(list)
    ​
    while True:try:element = next(my_iterator)print(element)except StopIteration:# 迭代结束,退出循环break
  • 生成器:使用了yield的函数被称为生成器(generator)

    1. 生成器是一个返回迭代器的函数,只能用于迭代操作,简单说生成器就是一个迭代器

    2. 在调用生成器的运行过程中,每次遇到yield式函数都会暂停并保存当前所有信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行

    3. 调用一个生成器函数,返回的是一个迭代器对象

    # 定义一个生成器函数
    def my_generatpr(n):for i in range(n):# 使用yield语句返回元素yield i * i
    ​
    # 创建一个生成器对象并遍历元素
    for element in my_generatpr(5):print(element)

迭代器和生成器的作用:

  • 节约内存:循环过程中,数据不用一次读入,迭代器不会保存所有值。而是在运行中动态的计算出数列的各个值,并将之前的数值扔掉

  • 不依赖索引取值

  • 实现惰性计算:需要时再取值计算

  • 精简代码:使用yield关键字或者生成器表达式可以很方便的生成一个迭代器对象

装饰器

  • 函数装饰器:本质上是一个python函数,可以让其它函数在不需要做任何代码改动的前提下增加额外功能

  • 提供了@符号作为装饰器的语法糖

  • 使用语法糖要求装饰件函数必须retrurn一个对象

    # 定义一个函数装饰器
    def my_decorator(func):def wrapper():print("Before function call")func()print("After function call")return wrapper()
    ​
    # 使用函数装饰器
    # 原有功能:打印”hello world“
    @my_decorator
    def say_hello():print("hello world")
    ​
    #调用函数
    say_hello()
    ​
    # 结果
    TypeError: 'NoneType' object is not callable
    Before function call
    hello world
    After function call
  • 类装饰器

    1. 可以用来改变类的行为,由python类和@符号组成,在python中通常用于实现代码复用,日志记录,性能测试等功能

    ​
    # 定义一个类装饰器
    class MyClassDecorator:def __init__(self, cls):self.cls = cls
    ​def __call__(self, *args, **kwargs):new_args = "Dear " + args[0]instance = self.cls(new_args, **kwargs)return instance
    ​
    # 使用类装饰器
    # 原有功能:打印 hello+名字
    @MyClassDecorator
    class MyClass:def __init__(self, name):self.name = name
    ​def say_hello(self):print(f"hello, {self.name}")
    ​
    # 创建实例
    my_object = MyClass("Alice")
    # 调用实例的方法
    my_object.say_hello()
    ​
    # 打印的结果hello,DearAlice
  • 需要注意的是,装饰器本身并不会改变原始代码的功能,而是通过创建一个新的函数来实现对原始函数或者类的修改,因此,在使用装饰器时,需要确保新创建的函数或者类与原始代码有相同的接口或者行为,以免对其它依赖于改代码的程序产生影响。

相关文章:

python进阶编程

lambda匿名函数 python使用lambda表达式来创建匿名函数 语法 // lambda 参数们:对参数的处理 lambda x : 2 * x // x 是参数, 2*x 是返回值 ​ //使用lambda实现求和 sum lambda arg1, arg2 : agr1 arg2 print(sum(10,20)) ​ // 将匿名函数封装在一…...

算法练习--leetcode 链表

文章目录 合并两个有序链表删除排序链表中的重复元素 1删除排序链表中的重复元素 2环形链表1环形链表2相交链表反转链表 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入&…...

Android性能优化—Apk瘦身优化

随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积 增加。而APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。在讨论如何缩减应用的大小之前,有必要了解下应用 APK …...

前端主题切换方案——CSS变量

前言 主题切换是前端开发中老生常谈的问题,本文将介绍主流的前端主题切换实现方案——CSS变量 CSS变量 简介 编写CSS样式时,为了避免代码冗余,降低维护成本,一些CSS预编译工具(Sass/Less/Stylus)等都支…...

Java8 list多属性去重

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇…...

kafka-保证数据不重复-生产者开启幂等性和事务的作用?

1. 生产者开启幂等性为什么能去重? 1.1 场景 适用于消息在写入到服务器日志后,由于网络故障,生产者没有及时收到服务端的ACK消息,生产者误以为消息没有持久化到服务端,导致生产者重复发送该消息,造成了消…...

[AI in security]-214 网络安全威胁情报的建设

文章目录 1.什么是威胁情报2. 威胁情报3. 智能威胁情报3.1 智能威胁情报的组成3.2 整合威胁情报3.3 最佳实践4. 威胁情报的作用5.威胁情报模型6.反杀链模型7.基于TI的局部优势模型参考文献相关的研究1.什么是威胁情报 威胁情报是循证知识,包括环境、机制、指标、意义和可行性…...

Javaweb学习(2)

Javaweb学习 一、Maven1.1 Maven概述1.2 Maven简介1.3、Maven基本使用1.4、IDEA配置Maven1.6、依赖管理&依赖范围 二、MyBatis2.1 MyBatis简介2.2 Mybatis快速入门2.3、解决SQL映射文件的警告提示2.4、Mapper代理开发 三、MyBaits核心配置文件四、 配置文件的增删改查4.1 M…...

leetcode410. 分割数组的最大值 动态规划

hard:https://leetcode.cn/problems/split-array-largest-sum/ 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1:输入:nums [7,2,5,1…...

C函数指针与类型定义

#include <stdio.h> #define PI 3.14 typedef int uint32_t; /* pfun is a pointer and its type is void (*)(void) */ void (*pfun)(void); /* afer typedef like this we can use “pfun1” as a data type to a function that has form like&#xff1a; / -------…...

最新2024届【海康威视】内推码【GTK3B6】

最新2024届【海康威视】内推码【GTK3B6】 【内推码使用方法】 1.请学弟学妹们登录校招官网&#xff0c;选择岗位投递简历&#xff1b; 2.投递过程中填写内推码完成内推步骤&#xff0c;即可获得内推特权。 内推码&#xff1a;GTK3B6 内推码&#xff1a;GTK3B6 内推码&…...

边写代码边学习之LSTM

1. 什么是LSTM 长短期记忆网络 LSTM&#xff08;long short-term memory&#xff09;是 RNN 的一种变体&#xff0c;其核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径&#xff0c;让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲&a…...

Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)

Elasticsearch8.8.0 全网最新版教程 从入门到精通 通俗易懂 配置项目 引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><dependency>&l…...

《MySQL高级篇》十五、其他数据库日志

文章目录 1. MySQL支持的日志1.1 日志类型1.2 日志的弊端 2. 慢查询日志(slow query log)3. 通用查询日志3.1 问题场景3.2 查看当前状态3.3 启动日志3.4 查看日志3.5 停止日志3.6 删除\刷新日志 4. 错误日志(error log)4.1 启动日志4.2 查看日志4.3 删除\刷新日志4.4 MySQL8.0新…...

【Linux】【预】配置虚拟机的桥接网卡+nfs

【Linux】【预】配置虚拟机的桥接网卡 1. 配置VM虚拟机的桥接网络2 配置Win10中的设置3.配置Linux中的IP4. 串口连接开发板&#xff0c;配置nfs5 修改网络文件6 验证nfs 是否成功总结 1. 配置VM虚拟机的桥接网络 右击设置&#xff0c;选择添加网络&#xff0c;按照如下顺序操作…...

【Android】Retrofit2和RxJava2新手快速上手

写这篇博客的目的 网上关于Retrofit2和RxJava2的博客特别多&#xff0c;但是内容特别复杂&#xff0c;一上来就讲解很高级的用法 其实我们没必要像高考做题家一样&#xff0c;把每个API都背的滚瓜烂熟 熟悉基本用法&#xff0c;高阶用法需要的时候再逐个了解就行了 因为博客…...

1.4 Nacos注册中心

目录 什么是Nacos Nacos下载和安装 下载和安装 启动 Nacos服务注册与发现 Nacos的服务分级存储模型 什么是分级存储模型 配置实例集群 配置同集群优先的负载均衡 权重配置 点击编辑按钮 配置所需的权重 环境隔离 创建namespace 什么是Nacos Nacoshttps://nacos.i…...

AOJ 2200 Mr. Rito Post Office 最短路径+动态规划+谨慎+思维

我写了好多注释&#xff0c;一看就能看懂&#xff0c;这个题目我想了6&#xff0c;7个小时&#xff0c;一开始忽略了船的位置和要把船安置的位置一致的情况&#xff0c;补上就对了。 #include <iostream> using namespace std; int inf 0x3f3f3f3f, num[1007], dp[1007…...

红米电视 ADB 安装 app 报错 failed to authenticate xxx:5555

开启电视开发者模式&#xff0c;允许安装未知来源应用及开启 ADB 调试电脑端下载 adb 工具 点击下载同一局域网的电脑使用 adb 工具连接&#xff08;提前查看电视 IP&#xff09;D:\adb>adb connect 192.168.1.7 * daemon not running; starting now at tcp:5037 * daemon s…...

Linux 下设置开机自启动的方法

文章目录 事先准备对于普通的 Linux对于 RedHat Enterprise Linux 9 笔者的运行环境&#xff1a; 设置成功过的 Linux&#xff1a; RedHat Enterprise Linux 9 x86_64 CentOS 8 x86_64 事先准备 进行这个教程之前&#xff0c;必须要先安装好一个 Linux 操作系统。这个 Linux…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...