文章目录

  • 1 \_\_main\_\_
    • 1.1 name 变量
      • 1.1.1 当模块作为主程序直接运行时
      • 1.1.2 当模块被其他模块导入时
    • 1.2 \_\_main\_\_ 的含义
    • 1.3 if \_\_name\_\_ == \_\_main\_\_
    • 1.5 小结
  • 2 lambda表达式
    • 2.1 基本概念
    • 2.2 lambda 函数语法
    • 2.3 使用示例
    • 2.4 与高阶函数结合使用
      • 2.4.1 与 map () 结合
      • 2.4.2 与 filter () 结合
      • 2.4.3 与 reduce () 结合
    • 2.5 lambda 函数 vs 常规函数(def)

1 __main__

1.1 name 变量

__name__ 是 Python 的一个内置变量,用于表示当前模块的名称。其值会根据模块的使用方式而变化:

1.1.1 当模块作为主程序直接运行时

此时 __name__ 的值被自动设置为 "__main__"

示例:创建一个 module.py 文件,内容如下:

print(f"模块的 __name__ 值: {__name__}")

直接运行该文件(python module.py),输出结果为:

模块的 __name__ 值: __main__

1.1.2 当模块被其他模块导入时

此时 __name__ 的值被设置为该模块的文件名(不包含 .py 扩展名)。

示例:创建另一个文件 import_module.py,内容如下:

import module  # 导入上面创建的 module.py

运行 import_module.py,输出结果为:

模块的 __name__ 值: module

1.2 __main__ 的含义

__main__ 是一个特殊的字符串常量,用于表示当前模块是作为主程序运行的

它通常不单独使用,而是与 __name__ 结合,用于判断模块的运行状态:

  • __name__ == "__main__" 时,表明模块是直接运行的
  • __name__ != "__main__" 时,表明模块是被导入的

1.3 if __name__ == __main__

这是 Python 中一种非常常见的代码模式,用于控制代码在不同场景下的执行行为

  • 当模块作为独立脚本运行时,执行 if 块内的代码
  • 当模块被其他模块导入时,不执行 if 块内的代码

步骤 1:创建 example.py 文件:

def greet():print("来自 example 模块的问候!")# 根据模块运行方式执行不同代码
if __name__ == "__main__":print("该脚本正在直接运行。")greet()  # 直接运行时调用函数
else:print("该脚本作为模块被导入。")

步骤 2:直接运行 example.py

python example.py

输出结果:

该脚本正在直接运行。
来自 example 模块的问候!

步骤 3:创建 another_script.py 并导入 example

import example  # 导入模块example.greet()  # 调用模块中的函数

运行 another_script.py

python another_script.py

输出结果:

该脚本作为模块被导入。
来自 example 模块的问候!

1.5 小结

  1. __name__ 是内置变量,表示当前模块的名称
    • 直接运行模块时,__name__ = "__main__"
    • 模块被导入时,__name__ = 模块文件名(不含 .py
  2. if __name__ == "__main__": 是 Python 的常用模式
    • 用于区分模块的两种使用方式:直接运行 vs 被导入
    • 使模块既可以作为独立程序运行,又可以作为库被其他模块导入

2 lambda表达式

2.1 基本概念

lambda 函数是 Python 中一种特殊的函数形式,也被称为匿名函数,即没有正式名称的函数。它旨在快速创建简单的、单行的函数,尤其适合需要临时使用的短小功能。

与常规函数(使用 def 定义)相比,lambda 函数的特点:

  • 匿名性:没有函数名称,只能通过赋值或作为参数传递使用
  • 简洁性:通常只包含一行代码和一个表达式
  • 临时性:适用于短期使用的简单功能

2.2 lambda 函数语法

lambda arguments: expression
  • lambda:Python 关键字,用于定义 lambda 函数
  • arguments:参数列表,可以包含 0 个或多个参数(用逗号分隔)
  • expression:一个表达式,用于计算并返回结果(lambda 函数的返回值)

注意:lambda 函数只能包含一个表达式,不能包含复杂的代码块(如循环、条件语句的多行形式等)

2.3 使用示例

无参数的 lambda 函数

# 定义无参数的 lambda 函数
f = lambda: "Hello, world!"# 调用函数
print(f())  # 输出: Hello, world!

单个参数的 lambda 函数

# 定义接收一个参数的 lambda 函数(计算参数加 10)
x = lambda a: a + 10# 调用函数
print(x(5))  # 输出: 15
print(x(10))  # 输出: 20

多个参数的 lambda 函数

# 两个参数:计算 a 乘以 b
multiply = lambda a, b: a * b
print(multiply(5, 6))  # 输出: 30# 三个参数:计算 a + b + c
add_three = lambda a, b, c: a + b + c
print(add_three(5, 6, 2))  # 输出: 13

带默认参数的 lambda 函数

# 带默认值的参数
greet = lambda name, greeting="Hello": f"{greeting}, {name}!"
print(greet("Alice"))  # 输出: Hello, Alice!
print(greet("Bob", "Hi"))  # 输出: Hi, Bob!

2.4 与高阶函数结合使用

lambda 函数最常见的用途是作为参数传递给高阶函数(接收函数作为参数的函数),如 map()filter()reduce() 等。

2.4.1 与 map () 结合

map(func, iterable) 会将函数应用于可迭代对象的每个元素,返回一个迭代器。

# 计算列表中每个元素的平方
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出: [1, 4, 9, 16, 25]# 处理多个可迭代对象
a = [1, 2, 3]
b = [4, 5, 6]
sum_list = list(map(lambda x, y: x + y, a, b))
print(sum_list)  # 输出: [5, 7, 9]

2.4.2 与 filter () 结合

filter(func, iterable) 用于筛选可迭代对象中满足函数条件的元素,返回一个迭代器。

# 筛选列表中的偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出: [2, 4, 6, 8]# 筛选长度大于 3 的字符串
words = ["apple", "cat", "banana", "dog", "grape"]
long_words = list(filter(lambda s: len(s) > 3, words))
print(long_words)  # 输出: ['apple', 'banana', 'grape']

2.4.3 与 reduce () 结合

reduce(func, iterable) 用于对可迭代对象中的元素进行累积计算(需从 functools 导入)。

from functools import reduce# 计算列表元素的累积乘积
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 输出: 120(1*2*3*4*5的结果)# 计算列表元素的累积和
sum_total = reduce(lambda x, y: x + y, numbers)
print(sum_total)  # 输出: 15(1+2+3+4+5的结果)

2.5 lambda 函数 vs 常规函数(def)

特性lambda 函数常规函数(def)
名称匿名,无名称有函数名
定义使用 lambda 关键字使用 def 关键字
表达式只能有一个表达式可以包含多个语句和代码块
返回值自动返回表达式结果需要显式使用 return 语句
文档字符串不支持支持(可通过 doc 访问)
适用场景简单的单行功能,临时使用复杂功能,需要复用的函数

示例对比

# 使用 lambda 定义
add_lambda = lambda a, b: a + b# 使用 def 定义
def add_def(a, b):return a + b# 功能相同
print(add_lambda(2, 3))  # 输出: 5
print(add_def(2, 3))     # 输出: 5

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

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

相关文章

Java:将视频上传到腾讯云并通过腾讯云点播播放

功能需求:传入一个videoFile也就是视频字节流,返回腾讯云点播的视频保存url需要在腾讯云中寻找的配置信息:导入的依赖:<!--腾讯云点播--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId&…

Unity3D物理游戏网络同步指南

前言 Unity3D 物理游戏的网络同步是一个复杂但非常核心的话题。要实现一个流畅、公平且可扩展的多人物理游戏&#xff0c;需要深入的理解和精心的设计。 下面我将为你全面解析 Unity3D 物理游戏的网络同步&#xff0c;包括核心概念、主流方案、实现细节以及最佳实践。 对惹&…

Amazon Redshift 访问配置完整指南

概述 Amazon Redshift 是 AWS 提供的云端数据仓库服务,支持多种访问方式。本文将详细介绍如何配置 IAM 权限、使用 AWS 控制台 Query Editor v2,以及通过 SQL Workbench/J 等第三方工具连接 Redshift 集群。 目录 环境准备 IAM 权限配置 Redshift 用户管理 AWS 控制台访问 …

electron-vite_19配置环境变量

前端配罟环境变量主要通过项目根目录下的.env系列文件实现&#xff0c;不同框架(如Vue、React)或构建工具(如Vite、Webpack)的具体操作略有差异&#xff0c;但核心逻辑均为通过环境变量文件区分开发、测试、生产等环境。方案1: 直接在根目录新建.env文件 1.在根目录新建 .env.d…

【python】arange用法

1. NumPy 里的 np.arangeimport numpy as np# 语法 np.arange([start, ]stop, [step, ], dtypeNone)参数说明&#xff1a;start&#xff1a;起始值&#xff08;默认 0&#xff09;stop&#xff1a;终止值&#xff08;不包含这个值&#xff09;step&#xff1a;步长&#xff08;…

力扣1005:k次取反后最大化的数组和

力扣1005:k次取反后最大化的数组和题目思路代码题目 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&…

国产数据库管理工具 CloudDM 2.7.1.0 发布,OceanBase 等数据源支持复杂 SQL 脱敏数据

CloudDM 是 ClouGence 公司推出的面向团队使用的数据库管理工具&#xff0c;支持云上、云下、多云等多种环境&#xff0c;并且提供多达 23 种数据源的支持。CloudDM 还支持数据库 DevOps CI/CD 功能&#xff0c;将用户产品发布流程中数据库发布和程序发布无缝串联起来。 更新亮…

AI大模型实战:用自然语言处理技术高效处理日常琐事

引言在数字化时代&#xff0c;我们每天都会面对大量的琐碎事务&#xff1a;整理会议记录、处理名单数据、撰写学习笔记等等。这些工作不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;的…

【spring security】为什么要使用userdetailservice

Spring Security UserDetailsService 深度解析&#xff1a;从401到认证成功的完整实现 &#x1f4cb; 目录 问题背景Spring Security认证架构UserDetailsService的作用完整实现过程常见问题与解决方案最佳实践 &#x1f3af; 问题背景 在开发B2B采购平台时&#xff0c;我们…

机器学习中的数据处理技巧

一、Pandas处理丢失数据&#xff08;一&#xff09;判断缺失值​​isnull()函数​​&#xff1a;用于判断数据框&#xff08;DataFrame&#xff09;中各个单元格是否为空&#xff0c;可帮助我们识别出存在缺失数据的单元格位置。&#xff08;二&#xff09;处理缺失值的方法​​…

田野科技“一张皮”,“AI+虚拟仿真”推动考古教学创新发展

文运同国运相牵&#xff0c;文脉同国脉相连。考古不仅关系到我们对古代文化的认知、发掘、保护、利用&#xff0c;关系到考古学学科体系、学术体系、话语体系的建设&#xff0c;更是关系到我国考古学的国际影响力&#xff0c;对增强世界不同地区古代文明的比较研究有着十分重要…

为什么我的UI界面会突然卡顿,失去响应

有操作都应是“非阻塞”的&#xff0c;以确保能随时响应用户的输入。导致主线程阻塞的常见“元凶”主要涵盖五个方面&#xff1a;主线程被“长时间”的同步计算所“阻塞”、单次渲染的界面节点过多或过于复杂、内存中存在“未释放”的巨大对象或“内存泄漏”、响应了“高频率”…

大规模IP轮换对网站的影响(服务器压力、风控)

在当下的互联网环境中&#xff0c;代理IP轮换已经成为爬虫、SEO、数据采集等行业的常见手段。尤其是大规模数据抓取时&#xff0c;通过代理池实现IP轮换&#xff0c;可以有效避免因单一IP请求过于频繁而被目标网站封禁。 然而&#xff0c;大规模IP轮换虽然对采集方有利&#xf…

4. STM32 vscode 环境, 官方插件

文章目录1. 新建配置2. 安装插件3. 新建工程1. 新建配置 新建vscode 配置&#xff0c; 因为stm32插件比较多&#xff0c; 避免和其他插件冲突。 激活环境&#xff1a; 这里可快速切换&#xff1a; 2. 安装插件 可选择安装最新预览版&#xff1a; 等待依赖安装完成后重启…

【动态规划:路径问题】最小路径和 地下城游戏

最小路径和&#xff08;medium&#xff09; 64. 最小路径和 ​ 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 ​ **说明&#xff1a;**每次只能向下或者向右移动一步。 示例 1&#xff…

SQL详细语法教程(七)核心优化

以下对 SQL 优化 涉及的关键场景&#xff08;含 update 行锁优化&#xff09;进行极致详细的拆解&#xff0c;从底层原理、执行流程到实战代码、避坑指南全维度覆盖&#xff0c;搭配表格对比让逻辑更清晰&#xff1a;一、SQL 优化 - COUNT 优化1. 底层原理&#xff1a;COUNT() …

Tomcat 的核心脚本catalina.sh 和 startup.sh的关系

catalina.sh 和 startup.sh 都是 Tomcat 的核心脚本&#xff0c;但它们的角色和使用场景有所不同。以下是它们的主要区别和适用场景&#xff1a;1. 功能区别脚本主要用途底层调用关系startup.sh一个快捷入口脚本&#xff0c;用于快速启动 Tomcat&#xff08;后台模式&#xff0…

飞算JavaAI:简易贪吃蛇小游戏

目录先确定核心功能技术选型核心功能实现过程1. 数据模型设计2. 游戏界面和绘制逻辑3. 游戏主框架和事件处理飞算JavaAI在开发中的应用体验可以进一步优化的地方作为Java课程的小作业&#xff0c;不想做太复杂的管理系统&#xff0c;就选了贪吃蛇这个经典小游戏。全程用Swing做…

如何保障内部网络安全前提下,实现与外部互联网之间的文件传输?

在数字化时代&#xff0c;企业网络环境日益复杂&#xff0c;普遍采用“内外网隔离”的安全架构&#xff1a;内部办公网承载业务系统与数据&#xff0c;外部互联网则用于对外沟通与信息获取。这种隔离有效抵御了外部攻击&#xff0c;但也带来了“信息孤岛”问题——如何在保障内…

计算机视觉 图片处理 在骨架化过程中,每次迭代都会从图像的边缘移除一层像素,直到只剩下单像素宽度的骨架

你说得对&#xff0c;if cv2.countNonZero(binary) 0: break 这个条件确实表示图像中已经没有非零像素&#xff0c;即图像完全变为空白。这并不是骨架化完成的标志&#xff0c;而是表示图像已经被腐蚀到没有任何内容了。 在骨架化过程中&#xff0c;我们需要一个更合适的停止条…