当前位置: 首页 > 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…...

MySQL常见问题处理(三)

MySQL 常见问题解决 夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记&#xff0c;进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…...

maven中常见问题

文章目录 一、配置项提示二、父子打包三、打包之后不显示target四、自定义打包之后的jar包名称五、整个项目打包5.1、父项目管理插件和微服务打包 一、配置项提示 SpringBoot中提示错误信息 表示的是SpringBoot中的注释提示没有配置&#xff01;那么可以来使用一下springboot官…...

vue2中bus的使用

说明&#xff1a;为了解决组件间的通信&#xff0c;也就是组件与组件间的数据传递(它们之间毫无关系)&#xff1b; 这里以组件1传递数据到组件2为例 1.首先新建一个Bus.js文件 import Vue from vue const Bus new Vue() export default Bus 2.在组件1中引用 传递数据 imp…...

实证研究在机器学习中的应用

实证研究是一种基于实际数据和事实的科学研究方法&#xff0c;目的是通过观察、测量、分析和解释数据来验证或否定某个假设、理论或研究问题。这种研究方法通常用于社会科学、自然科学和医学等领域。以下是实证研究的详细解释&#xff1a; 研究目标&#xff1a;实证研究旨在通过…...

IO进程线程day8(2023.8.6)

一、Xmind整理&#xff1a; 管道的原理&#xff1a; 有名管道的特点&#xff1a; 信号的原理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;pipe 功能&#xff1a;创建一个无名管道&#xff0c;同时打开无名管道的读写端 原型&#xff1a; #include <unist…...

【5G NR】逻辑信道、传输信道和物理信道的映射关系

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

tmux基础教程

tmux基础教程 Mac安装 brew install tmuxubuntu安装 sudo apt-get install tmux入门使用 会话 (Session) Ctrlb d: 分离当前会话。Ctrlb s: 列出所有会话。Ctrlb $: 重命名当前会话。 窗口&#xff08;Window&#xff09; Ctrlb c: 创建一个新窗口, 状态栏会显示多个窗…...

项目实战 — 消息队列(4){消息持久化}

目录 一、消息存储格式设计 &#x1f345; 1、queue_data.txt&#xff1a;保存消息的内容 &#x1f345; 2、queue_stat.txt&#xff1a;保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 &#x1f345; 1、约定消息文件所在的目录和文件名…...

AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载 简介 现在没有AI编程工具&#xff0c;效率会打一个折扣&#xff0c;如果还没有&#xff0c;赶紧装起来&#xff0e; GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具&#xff0c;基于ChatGPT驱动&#xff0c;功能强大&#xff0c;这个没人怀疑…...

webpack基础知识六:说说webpack的热更新是如何做到的?原理是什么?

一、是什么 HMR全称 Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用 例如&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致…...