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

函数和模式化——python

一、模块和包

        将一段代码保存为应该扩展名为.py 的文件,该文件就是模块。Python中的模块分为三种,分别为:内置模块、第三方模块和自定义模块。

  • 内置模块和第三方模块又称为库
  • 内置模块,有 python 解释器自带,不用单独安装
  • 第三方模块,需要下载后手动安装
  • 如果内置模块和第三方模块没有需要的功能,就需要用户自己编写程序,将程序保存为.py 文件,即是自定义模块。

无论哪种模块都需要使用 import 调用后,才能在程序中调用其中的功能函数。

       

        将功能近似的、关联较强的模块组织起来,形成一个目录,叫做

python中的包是模块包,文件名。包括:

  • 一组模块
  • _init_.py 文件
  • 支持多层嵌套
  • .py 程序文件中可以直接定义一些变量,函数和类
  • 使用时,通过import 导入,如: import math

他们的关系如下:

        包——>  模块 ——> 函数

二、函数

1、函数的定义函数的语法格式如下:       

def 函数名( [ 次数1,参数2,…,参数n ] ):语句块[ return [ 返回值1,返回值2,…,返回值n] ]

2、函数的定义和调用

(1)def 为python保留字,用于定义函数,函数名的命名规则和变量一致;

(2)括号中是函数的参数,参数可以为空,此时,括号()不能省略,函数参数也可以是多个,多个参数之间有英文逗号隔开;

(3)语句块是函数体,可以对函数进行调用,完成函数的主要功能;

(4)retrun 是函数的返回保留字,当函数没有返回值时,return 保留字可以省略,函数有多个返回值时,在return 保留字后面,将多个返回值以英文逗号隔开;

#无返回值时省略return
def greet(name):print(f"Hello, {name}!")
result = greet("Alice")  # 输出: Hello, Alice!
print(result)            # 输出: None#单返回值
def add(a, b):return a + b
sum_result = add(3, 5)  # sum_result = 8#多返回值
def calculate(a, b):add = a + bsub = a - breturn add, sub  # 实际返回元组 (add, sub)result = calculate(10, 5)
print(result)        # 输出: (15, 5)# 解包返回值
sum_result, diff_result = calculate(10, 5)
print(sum_result)    # 输出: 15
print(diff_result)   # 输出: 5

这里的解包返回值,大家不懂的话不要害怕,我在最后做了补充。

(5)函数的类型和函数的返回值类型相同,当返回值是多个时,函数的返回值是元组类型。

  • 单返回值类型:若函数返回单个值(如 int),则直接标注为对应类型。
def get_number() -> int:return 42
  • 多返回值类型:若函数返回多个值(如 a, b),Python 会将其转换为元组。此时返回值类型应标注为 tuple[类型1, 类型2, ...]
def calculate(a: int, b: int) -> tuple[int, int]:return a + b, a - b  # 实际返回 (int, int) 类型的元组

三、函数的参数

1、形参与实参

  • 函数定义时,圆括号内参数列表的参数,不代表具体的数据,称为形参;
  • 函数调用时,将具体的数据传递给形式参数,此时的参数称为实参
  • 根据参数的不同数据类型,将实参的值或者引用传递给形参
  • 当参数类型为不可变数据类型时,在函数内部直接修改形参的值不会影响实参;
  • 但当参数类型为可变数据类型时,在函数内部使用下标或其他方式为其增加、删除元素或修改元素值时,修改后的结果是可以传递到函数之外的,即实参也会得到相应的修改。

2、必备参数、默认参数、可变参数和关键字参数

  • 函数调用时,必须传递的参数,称为必备参数,也称必选参数
  • 函数定义时,设置了默认值的参数函数调用时,可以传递实参,也可以不传递参数,不传递时,参数取定义时的默认值,这种参数,称为默认参数,也称可选参数
  • 需要注意的是,必备参数必须在前面定义,其他参数在后面定义。

3、参数传递

  • 在函数调用参数传递时,按位置形参和实参一一对应传递称为位置传递
  • 在函数调用参数传递时,按照参数的名称显式的传递,称为名称传递

        按位置传递,不需要给出参数的名称,但形参和实参的位置相同、类型相同,否则容易出错;按名称显式的传递参数,则不关心参数的前后顺序,在参数较多时,不容易混淆。

4、全局变量与局部变量

  • 在函数外部定义的变量,称为全局变量;在函数内部定义的变量称为局部变量
  • 全局变量的生命周期是程序的整个运行周期,只有程序被关闭后全局变量才会被销毁并释放内存空间,因此,全局变量在整个程序中,都可以使用;
  • 局部变量的生命周期是函数调用时间,函数调用结束返回后,局部变量就销毁并释放内存空间,因此局部变量的作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。

5、匿名函数

        当函数一次性使用,函数体语句较少,如只有一个表达式,为了节省内存中变量定义空间就不需要定义函数名,此时,可以定义匿名函数。名函数的语法格式是:
 

        函数名 =lambda」参数]:返回值

              
        匿名函数可以有0个或多个参数,但必须有返回值。匿名函数的调用和一般函数的调用相似可以单独使用,也可以作为表达式的一部分。

常见使用场景

(1)作为参数传递(如 sortedmapfilter

# 按字符串长度排序列表
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 输出 ['date', 'apple', 'banana', 'cherry']# 过滤偶数
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4]# 对每个元素平方
squared = list(map(lambda x: x**2, numbers))
print(squared)       # 输出 [1, 4, 9, 16, 25]

 filter()函数在前面提过,过滤出满足条件的函数。

(2)快速定义简单逻辑

# 判断是否为偶数
is_even = lambda x: x % 2 == 0
print(is_even(4))  # True# 拼接字符串
greet = lambda name: f"Hello, {name}!"
print(greet("Alice"))  # Hello, Alice!

(3)结合条件表达式

# 返回两数中的较大值
max_value = lambda a, b: a if a > b else b
print(max_value(5, 8))  # 8

四、补充:

解包返回值:

         Python 中一种便捷的语法,用于将函数返回的多个值(通常是元组、列表等可迭代对象)直接拆分并赋值给多个变量。它的核心目的是让代码更简洁、可读性更强。

【例】假设有一个函数返回两个值:

​def get_coordinates():x = 3y = 4return x, y  # 实际返回的是元组 (3, 4)​
不解包的情况

直接获取返回值时,会得到一个元组:

coords = get_coordinates()
print(coords)        # 输出 (3, 4)
print(coords[0])     # 输出 3(通过索引访问)
print(coords[1])     # 输出 4
解包的情况

将元组中的值直接拆分为两个变量:

x, y = get_coordinates()  # 解包赋值
print(x)  # 输出 3
print(y)  # 输出 4

解包具有灵活性:

(1)适用于任意可迭代对象

        不仅是元组,列表、字符串等可迭代对象也可以解包:

def get_data():return ["Alice", 25, "Engineer"]name, age, job = get_data()  # 解包列表
print(name)  # Alice

(2)忽略不需要的值

        用下划线 _ 占位忽略不需要的返回值:

x, _ = get_coordinates()  # 只要 x,忽略 y
print(x)  # 3

(3)解包嵌套结构

        甚至可以解包嵌套的返回值(如元组中的元组):

def nested_data():return (1, (2, 3))a, (b, c) = nested_data()
print(a, b, c)  # 1 2 3

(4)使用 * 处理剩余值

用 * 变量名 接收剩余的所有值(返回列表):

def multiple_values():return 1, 2, 3, 4, 5first, *middle, last = multiple_values()
print(first)   # 1
print(middle)  # [2, 3, 4](中间的数值被封装为列表)
print(last)    # 5

注意事项:

(1)变量数量必须匹配

        左侧变量数必须与返回值数量一致,否则会报错:

x, y, z = get_coordinates()  # 错误!元组只有 2 个值,但尝试解包给 3 个变量

(2)返回值必须是可迭代对象

        如果函数返回单个值(非元组/列表等),尝试解包会报错:

def single_value():return 5a, b = single_value()  # 错误!单个整数无法解包

相关文章:

函数和模式化——python

一、模块和包 将一段代码保存为应该扩展名为.py 的文件,该文件就是模块。Python中的模块分为三种,分别为:内置模块、第三方模块和自定义模块。 内置模块和第三方模块又称为库内置模块,有 python 解释器自带,不用单独安…...

Python解决“数字插入”问题

Python解决“数字插入”问题 问题描述测试样例解题思路代码 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。 你…...

Go语言的嵌入式网络

Go语言的嵌入式网络 引言 在当今快速发展的互联网时代,嵌入式系统和网络技术的结合变得越来越普遍。嵌入式系统是指嵌入到设备中以实现特定功能的计算机系统,它们通常具有资源有限的特点。随着物联网(IoT)的兴起,嵌入…...

Dart 语法

1. 级联操作符 … var paint Paint()..color Colors.black..strokeCap StrokeCap.round..strokeWidth 5.0;2. firstWhereOrNull 3. 隐藏或导入部分组件 // Import only foo. import package:lib1/lib1.dart show foo;// Import all names EXCEPT foo. import package:lib…...

MCP over MQTT:EMQX 开启物联网 Agentic 时代

前言 随着 DeepSeek 等大语言模型(LLM)的广泛应用,如何找到合适的场景,并基于这些大模型构建服务于各行各业的智能体成为关键课题。在社区中,支持智能体开发的基础设施和工具层出不穷,其中,Ant…...

ACM代码模式笔记

系列博客目录 文章目录 系列博客目录1.换行符 1.换行符 nextInt()、nextDouble() 等不会消耗换行符: 当使用 nextInt() 或 nextDouble() 读取数字时,它只读取数字部分,不会消耗掉输入后的换行符。 nextLine() 会读取并消耗换行符&#xff1a…...

相干光信号处理的一些基础知识

1. 逆琼斯矩阵问题 逆琼斯矩阵方法常用于逆向补偿由光学系统或传输信道(如光纤)引入的偏振态(SOP, State of Polarization)畸变。 1.1 琼斯向量 任意偏振光可用二维复数向量表示: E [ E x E y ] [ ∣ E x ∣ e i…...

WiFi加密协议

目录 1. 认证(Authentication)‌ ‌1.1 开放系统认证(Open System Authentication)‌ 1.2 共享密钥认证(Shared Key Authentication)‌ ‌1.3 802.1X/EAP认证(企业级认证)‌ ‌2. 关联(Association)‌ ‌3. 加密协议(Security Handshake)‌ ‌整体流程总结‌…...

程序化广告行业(61/89):DSP系统活动设置深度剖析

程序化广告行业(61/89):DSP系统活动设置深度剖析 大家好!在程序化广告的学习道路上,我们已经探索了不少重要内容。今天依旧本着和大家一起学习进步的想法,深入解析DSP系统中活动设置的相关知识。这部分内容…...

[王阳明代数讲义]具身智能才气等级分评价排位系统领域投射模型讲义

具身智能才气等级分评价排位系统领域投射模型讲义 具身智能胆识曲线调查琴语言的行为主义特性与模式匹配琴语言的"气质邻域 "与气度,云藏山鹰符号约定 琴语言的"气质邻域 "与气度,一尚韬竹符号约定 琴语言的"气质邻域 "与…...

【Block总结】PlainUSR的局部注意力,即插即用|ACCV2024

论文信息 标题: PlainUSR: Chasing Faster ConvNet for Efficient Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguang Liu发表时间: 2024年会议/期刊: 亚洲计算机视觉会议(ACCV 2024)研究背景: 超分辨率(Super-Resolution, S…...

Kubernetes集群管理详解:从入门到精通

1. 引言 Kubernetes(简称k8s)作为当今最流行的容器编排平台,已成为云原生应用部署和管理的事实标准。本文将深入探讨k8s集群管理的各个方面,为运维工程师和开发人员提供一个全面的指南。 2. Kubernetes架构概览 在深入具体的管理任务之前,让我们先回顾一下Kubernetes的基本架…...

Git 换行符警告(LF replaced by CRLF)的解决方案

根据你的日志和知识库中的信息,以下是针对 Git 换行符警告(LF replaced by CRLF) 的解决方案: 一、问题分析 警告原因 你当前在 Windows 系统 上工作,但某些文件(如 .gitignore, README.md, package.json 等…...

【C++】从零实现Json-Rpc框架(2)

目录 JsonCpp库 1.1- Json数据格式 1.2 - JsonCpp介绍 • 序列化接口 • 反序列化接口 1.3 - Json序列化实践 JsonCpp使用 Muduo库 2.1 - Muduo库是什么 2.2 - Muduo库常见接口介绍 TcpServer类基础介绍 EventLoop类基础介绍 TcpConnection类基础介绍 TcpClient…...

蓝桥云客--回文数组

0回文数组 - 蓝桥云课 问题描述 小蓝在无聊时随机生成了一个长度为 n 的整数数组,数组中的第 i 个数为 ai​,他觉得随机生成的数组不太美观,想把它变成回文数组,也就是对于任意 i∈[1,n] 满足 ai​an−i1​。小蓝一次操作可以指…...

FastAPI依赖注入:链式调用与多级参数传递

title: FastAPI依赖注入:链式调用与多级参数传递 date: 2025/04/05 18:43:12 updated: 2025/04/05 18:43:12 author: cmdragon excerpt: FastAPI的依赖注入系统通过链式调用和多级参数传递实现组件间的解耦和复用。核心特性包括解耦性、可复用性、可测试性和声明式依赖解析…...

【STM32单片机】#5 定时中断

主要参考学习资料: B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装:STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...

OrbStack 作为 Mac 用户的 Docker 替代方案

推荐使用 OrbStack 作为 Mac 用户的 Docker 替代方案 在现代开发环境中,容器化技术已经成为了软件开发的重要组成部分。对于 Mac 用户来说,Docker Desktop 是一个广泛使用的工具,但它并不是唯一的选择。本文将推荐 OrbStack 作为 Docker Desktop 的替代方案,并探讨其优势。…...

运行小程序报错

[ app.json 文件内容错误] app.json: ["tabBar"]["list"] 不能超过 5 项(env: Windows,mp,1.06.2206090; lib: 3.7.12) 他的意思大概是,微信小程序 app.json 文件中的 tabBar.list 配置项超过了 5 项。这是微信小程序的限制,tabBar…...

Nature Electronics|一种透气、可拉伸的液态金属基3D电子皮肤系统(健康监测/可穿戴电子/透汗透气性电子/电子皮肤/柔性电子/集成电路)

一、 摘要 穿戴式和皮肤电子设备的发展要求高密度可伸展电子系统能够与软组织共形,持续运行并提供长期的生物相容性。大多数可拉伸电子系统的集成密度低,并且与外部印刷电路板连接,这限制了功能,降低了用户体验并阻碍了长期可用性。在此,作者提出了一种可渗透的三维集成电…...

深入剖析丝杆升降机工作原理,解锁工业传动奥秘

丝杆升降机,在工业设备的大舞台上扮演着不可或缺的角色,被广泛应用于机械制造、自动化生产线、建筑施工等众多领域。它能够精准实现重物的升降、定位等操作,为各类工业生产提供了稳定可靠的支持。想要深入了解丝杆升降机,就必须探…...

【51单片机】2-3【I/O口】震动传感器控制LED灯

1.硬件 51最小系统LED灯模块震动传感器模块 2.软件 #include "reg52.h"sbit led1 P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口 sbit vibrate P3^3;//震动传感器DO接P3.3口void Delay2000ms() //11.0592MHz {…...

TortoiseSVN设置忽略清单

1.TortoiseSVN > Properties(如果安装了 TortoiseSVN)。 2. 在弹出的属性窗口中,点击 New > Other。 4. 在 Property name 中输入 svn:ignore 。 5. 在 Property value 中输入要忽略的文件夹或文件名称,例如: #…...

大模型持续学习方案解析:灾难性遗忘的工业级解决方案

引言 随着大型语言模型(LLMs)如 GPT 系列、BERT 等在自然语言处理领域取得突破性进展,它们强大的理解和生成能力已经渗透到各行各业。然而,这些模型通常是在海量静态数据集上进行一次性预训练的。现实世界是动态变化的&#xff0…...

《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析

《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析 一、套接字选项核心原理 1.1 选项层级体系 套接字选项按协议层级划分(图1): SOL_SOCKET:通用套接字层选项IPPROTO_IP:IPv4协议层…...

Debian编译安装mysql8.0.41源码包 笔记250401

Debian编译安装mysql8.0.41源码包 以下是在Debian系统上通过编译源码安装MySQL 8.0.41的完整步骤,包含依赖管理、编译参数优化和常见问题处理: 准备工作 1. 安装编译依赖 sudo apt update sudo apt install -y \cmake gcc g make libssl-dev …...

医疗思维图与数智云融合:从私有云到思维图的AI架构迭代(代码版)

医疗思维图作为AI架构演进的重要方向,其发展路径从传统云计算向融合时空智能、大模型及生态开放的“思维图”架构迭代,体现了技术与场景深度融合的趋势。 以下是其架构迭代的核心路径与关键特征分析: 一、从“智慧云”到“思维图”的架构演进逻辑 以下是针对医疗信息化领域…...

【计算机网络应用层】

文章目录 计算机网络应用层详解一、前言二、应用层的功能三、常见的应用层协议1. HTTP/HTTPS(超文本传输协议)2. DNS(域名系统)3. FTP(文件传输协议)4. SMTP/POP3/IMAP(电子邮件协议&#xff09…...

【JS】接雨水题解

题目 思路 首先我们要明确如何计算每条柱子的接水量: 每条柱子对应接到的雨水量该柱子左边最大值和右边最大值中的较小值-该柱子本身的高度。举例:第二条柱子自身高度为0,左边最大值为1,右边最大值为3,取较小值1-自身…...

线代[12]|《高等几何》陈绍菱(1984.9)(文末有对三大空间的分析及一个合格数学系毕业生的要求)

文章目录 一、概述二、平面仿射几何的基本概念三、平面射影几何的基本概念四、变换群和几何学五、二次曲线的射影理论、仿射理论和度量理论六、射影几何公理基础七、非欧几里得几何概要八、自我测试题九、欧氏解析几何、仿射解析几何、射影解析几何与其他(博主借助A…...