《0基础》学习Python——第十一讲

news2024/12/23 8:47:12

一、lambda 匿名函数

        lambda函数是一种匿名函数。它是一种快速定义单行函数的方法。与常规函数不同,lambda函数没有名称,也没有使用def关键字来定义。lambda函数通常用于一些简单的函数,可以在代码中快速定义和使用,而不需要为其定义一个正式的函数。

        其中,arguments是函数的参数,可以有多个参数,用逗号分隔。expression是函数的表达式,它是函数的返回结果。例如:

add = lambda x, y: x + y
print(add(5, 3))  # 输出结果为8,其中5和3为参数,分别输给x和y

li = [1, 2, 3, 4]
    new_li = []
f = lambda x: x + 1
    print(f(1))
    new_li = [f(i) for i in li]
    print(new_li)

可分解为以下代码
li = [1, 2, 3, 4]
new_li = []
def summ(x):
    x=x+1
    return x

if __name__== "__main__":
    summ(1)
    print(summ(1))

new_li=[]
for i in li:
    new_li.append(summ(i))
print(new_li)

        优点:它们可以用于快速定义简单的函数,而不需要为其定义一个正式的函数。

        缺点:它们的功能有限,只能包含一个表达式。如果需要在函数中包含多条语句或复杂的逻辑,就需要使用常规的函数定义。

二、映射函数(map)和规约函数(reduce)

        mapreduce是Python中的两个常用高阶函数,用于对序列进行操作。

        1、map:映射

        函数接收一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个结果列表。它对序列中的每个元素应用同一个函数,并返回一个新的列表,列表中的每个元素是原列表中对应元素经过函数处理后的结果。例如:

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x**2, numbers)
print(list(squared_numbers))  # 输出结果为 [1, 4, 9, 16, 25]

        2、reduce:规约

        函数接受一个函数和一个可迭代对象作为参数,将可迭代对象中的元素依次应用到函数上,得到一个结果。然后将该结果与下一个元素结合,再次应用函数,以此类推,直到遍历完可迭代对象,最终返回一个聚合结果。例如:

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 输出: 120

上部分代码,即通过匿名函数给予参数想,x,y的方法是x*y,然后通过规约函数赋予x,y的值为列表numbers中的元素,其工作方式为:x=1,y=2,然后x*y=1*2等于2,然后把这个2赋予给x,再把列表中的第三个数3赋予给y,继续进行x*y,等于2*3=6,然后再继续把6赋予给x,再把列表中的4赋予给y,继续进行x*y,直至结束。

三、命名空间namespace(局部、全局、内置)

        命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的,其提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能重名,但不同的命名空间是可以重名而没有任何影响。

        1、局部函数内部找变量

        2、全局:在整个代码之前找变量

        3、内置Python内置的模块去寻找

        例如在一个计算机系统中,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名

Python中一般有三种命名空间:

        1、内置名称(built-in names):Python 语言内置的名称,比如函数名 abs、chr 和异常名称

BaseException、Exception 等等

        2、全局名称(global names):模块中定义的名称,记录了模块的变量,包括函数、类、其

它导入的模块、模块级的变量和常量

        3、局部名称(local names):函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量(类中定义的也是)

命名空间查找顺序:

        假设我们要使用变量 money,则 Python 的查找顺序为

        局部的命名空间 -> 全局命名空间 -> 内置命名空间,如果找不到变量 money,它将放弃查找并引发一个错误

命名空间的生命周期:

        命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束,因此无法从外部命名空间访问内部命名空间的对象

四、作用域(L、E、G、B)

        在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。

        Python 的作用域一共有4种:

                1、L(Local):局部作用域,包含局部变量,比如一个函数/方法内部

                2、E(Enclosing):嵌套作用域,包含了非局部(non-local)也非全局(non-global)的变量

                3、G(Global):全局作用域最外层,比如当前模块的全局变量

                4、B(Built-in):内置作用域,包含内建变量/关键字等,最后被搜索

        在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

        Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

        1、全局作用域(Global scope):

        在模块中定义的变量具有全局作用域,可以在模块的任何位置访问。

x = 10  # 全局作用域

def foo():
    print(x)  # 可以访问全局作用域中的变量
    
foo()  # 输出: 10

        2、局部作用域(Local scope):

        在函数或类方法中定义的变量具有局部作用域,只能在定义它们的函数或方法内部访问。

def foo():
    y = 20  # 局部作用域
    
    def bar():
        print(y)  # 可以访问外部函数的变量
        
    bar()
    
foo()  # 输出: 20

        3、嵌套作用域(Enclosing scope):

        在嵌套函数中,内部函数可以访问外部函数的变量。

def outer():
    z = 30  # 嵌套作用域
    
    def inner():
        print(z)  # 可以访问外部函数的变量
        
    inner()
    
outer()  # 输出: 30

        4、内置作用域(Built-in scope):

        在Python解释器中预定义的变量和函数具有内置作用域,可以在任何地方访问。

print(len([1, 2, 3]))  # 内置函数len()可以在任何地方访问

        在Python中,变量的作用域遵循LEGB原则,即在访问变量时,首先在局部作用域查找,然后在嵌套作用域中查找,接着在全局作用域中查找,最后在内置作用域中查找。如果在任何作用域中都找不到变量,则抛出NameError异常。

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

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

相关文章

推荐系统:从协同过滤到深度学习

目录 一、协同过滤(Collaborative Filtering, CF)1. 基于用户的协同过滤2. 基于物品的协同过滤 二、深度学习在推荐系统中的应用1. 深度学习模型的优势2. 深度学习在推荐系统中的应用实例 三、总结与展望 推荐系统是现代信息处理和传播中不可或缺的技术&…

异常检测算法

目录 一、异常检测算法功能:二、正态(高斯)分布:三、异常检测算法执行过程:四、如何选择特征:五、评估异常检测算法: 一、异常检测算法功能: 异常检测算法用来检测数据集中的一些异…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥,不带pub是私钥,打死都不能给别人。复制公钥 拿到公钥后,来到远程服务器 vim ~/.ss…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述 在先前探讨的文章中,我们构建了一个全面的数据测试体系,该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板,以直观展现分析结果,正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数…

前端路由手写Hash和History两种模式

文章目录 1. Hash模式:简洁而广泛适用2. History模式:更自然的用户体验3. 结论 在现代Web开发中,单页面应用(Single Page Application,简称SPA)因其流畅的用户体验和高效的页面交互能力而备受青睐。前端路由…

C#学习3-微软C#官方文档Microsoft-dotnet-csharp.pdf

文章目录 1.内插表达式的字段宽度和对齐方式 1.内插表达式的字段宽度和对齐方式 static void Main(string[] args) {var titles new Dictionary<string, string>() {["Doyle ,Arthur"] "Hound of the Basker,The",["Lodon ,Jack"] &quo…

数电基础 - 触发器

目录 ​编辑 一. 简介 二. SR锁存器 三. JK 触发器 四. D 触发器 五. 电平触发的触发器 六. 脉冲触发的触发器 七. 边沿触发的触发器 八 . 触发器的逻辑功能和描述方法 一. 简介 触发器是数字电路中的一种基本存储单元&#xff0c;具有记忆功能&#xff0c;能够存储一…

记录些MySQL题集(3)

MySQL 分区技术深入解析 分区的基本概念 MySQL分区 是一种数据库优化的技术&#xff0c;它允许将一个大的表、索引或其子集分割成多个较小的、更易于管理的片段&#xff0c;这些片段称为“分区”。每个分区都可以独立于其他分区进行存储、备份、索引和其他操作。这种技术主要…

【常见开源库的二次开发】基于openssl的加密与解密——Base58比特币钱包地址——算法分析(三)

目录&#xff1a; 目录&#xff1a; 一、base58(58进制) 1.1 什么是base58&#xff1f; 1.2 辗转相除法 1.3 base58输出字节数&#xff1a; 二、源码分析&#xff1a; 2.1源代码&#xff1a; 2.2 算法思路介绍&#xff1a; 2.2.1 Base58编码过程&#xff1a; 2.1.2 Base58解码过…

网络安全 DVWA通关指南 DVWA Brute Force (爆破)

DVWA Brute Force (爆破) 文章目录 DVWA Brute Force (爆破)LowMediumHighImpossible Low 1、分析网页源代码 <?php// 检查是否存在"Login" GET 参数&#xff0c;这通常是提交登录表单后触发的动作 if( isset( $_GET[ Login ] ) ) {// 获取POST方式提交的用户名…

SpringCloud | 单体商城项目拆分(微服务)

为什么要进行微服务拆分&#xff1f; 在平常的商城项目中&#xff0c;我们一般的项目结构模块都是将各种业务放在同一个项目文件夹&#xff0c;比如像&#xff1a; 用户&#xff0c;购物车&#xff0c;商品&#xff0c;订单&#xff0c;支付等业务都是放在一起&#xff0c;这样…

无人机航电系统技术详解

一、系统概述 无人机航电系统&#xff08;Avionics System&#xff09;是无人机飞行与任务执行的核心部分&#xff0c;它集成了飞控系统、传感器、导航设备、通信设备等&#xff0c;为无人机提供了必要的飞行控制和任务执行能力。航电系统的设计和性能直接影响到无人机的安全性…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

关于KafkaTemplate与 @KafkaListener生产者与消费者功能的实现

1.前言&#xff1a; 1.1关于生产者与消费者的详细介绍请查看另一篇文章&#xff1a; 使用JavaApi实现模拟Kafka的消息生产者与发送者http://t.csdnimg.cn/ukNSU 1.2 本文使用 KafkaTemplate与 KafkaListener实现生产者与消费者功能&#xff1a; Kafka 是一个流行的分布式流处…

解决RuntimeError: Couldn‘t load custom C++ ops. This can happen if your PyTorch

问题描述 刚下好yolov8的代码&#xff0c;想测一下能否成果&#xff0c;果然没成功&#xff0c;报错如下 RuntimeError: Couldnt load custom C ops. This can happen if your PyTorch and torchvision versions are incompatible, or if you had errors while compiling tor…

设计模式-创建型模式之工厂方法模式

和简单工厂模式中工厂负责生产所有产品相比&#xff0c;工厂方法模式将生成具体产品的任务分发给具体的产品工厂&#xff0c;定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪个产品类对象。 工厂方法模式的主要角色: 抽象工厂(AbstractFactory):提供了创建产品的接…

C++20中的constinit说明符

constinit说明符断言(assert)变量具有静态初始化&#xff0c;即零初始化和常量初始化(zero initialization and constant initialization)&#xff0c;否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…

代谢组数据分析(十四):代谢物组间网络分析(spearman coefficient)

介绍 在代谢物网络分析领域,研究者采用斯皮尔曼系数来定量评估代谢物之间的相关性。该系数作为一种有效的非参数统计工具,能够揭示代谢物间潜在的关联模式,不受它们分布特性的限制。通过计算所有代谢物配对间的斯皮尔曼系数,研究者能够构建出反映代谢物相互关系的网络。 …

Word创建多级列表的样式

Word创建多级列表的样式 要求结果方法创建样式修改样式设置段落创建快捷键 关联多级列表 要求 创建自定义的三级列表样式&#xff0c;要求标题均为黑体&#xff0c;小四字号&#xff0c;1.5倍行距&#xff0c;有快捷键。 结果 方法 在样式中创建三个样式。 创建样式 录入名…

BL201分布式I/O耦合器连接Profinet网络

钡铼技术的BL201分布式I/O耦合器是一个用于Profinet网络的设备&#xff0c;用于连接远程输入/输出&#xff08;I/O&#xff09;设备到控制系统&#xff0c;如可编程逻辑控制器&#xff08;PLC&#xff09;&#xff0c;能够实现分布式的I/O连接和通信。 它支持标准Profinet IO …