Python函数与模块

news2025/4/25 8:21:41

简介

在Python编程中,函数和模块是实现代码复用、提高开发效率的核心机制。本文将结合理论与实例,解析Python函数与模块的核心知识点,帮助开发者打下基础。

一、函数

函数是一段可重复调用的代码块,通过参数传递实现灵活的逻辑封装。Python中的函数分为内置函数(如​​range()​​​、​​len()​​)和用户自定义函数,后者是我们重点讨论的内容。

1. 无参函数

无参函数不接收外部参数,适用于固定逻辑的场景。
语法

def 函数名():
    代码块
    [return 表达式]  # 可选,无返回值时默认返回None

示例1:计算固定两数之和

def add():
    op1 = 10
    op2 = 20
    return op1 + op2  # 返回计算结果
result = add()
print(result)  # 输出:30

示例2:打印九九乘法表

def nine():
    for i in range(1, 10):
        for j in range(1, i+1):
            print(f"{i}*{j}={i*j}", end="\t")
        print()  # 换行
nine()

注意事项

  • 函数定义必须在调用前,否则抛出​​NameError​​。
  • 函数体通过缩进(通常4个空格)界定,缩进错误会导致语法错误。
2. 带参函数

带参函数通过形式参数(形参)接收外部输入,实现通用逻辑。
语法

def 函数名(形参列表):
    代码块
    [return 表达式]

参数传递方式

  • 位置参数:实参与形参按顺序匹配。
def aa(x, y):
    print(x, y)
aa(10, 6)  # 输出:10 6(位置匹配)
aa(6, 10)  # 输出:6 10(顺序改变结果不同)
  • 关键字参数:显式指定参数名,忽略顺序。
aa(y=6, x=10)  # 输出:10 6(通过参数名匹配)
  • 默认参数:为形参设置默认值,调用时可省略。
def aa(x, y=6):  # y的默认值为6
    print(x, y)
aa(10)  # 输出:10 6(使用y的默认值)
aa(10, 5)  # 输出:10 5(覆盖默认值)
  • 注意:位置参数必须位于默认参数之前,否则语法错误。
# 错误示例:默认参数在前,位置参数在后
def aa(x=1, y):  
    pass  # 报错:SyntaxError

示例:

def add(x, y): return x + y
def subtract(x, y): return x - y
def multiply(x, y): return x * y
def divide(x, y): return x / y

print("选择运算:1.加 2.减 3.乘 4.除")
choice = int(input("输入选择:"))
num1 = int(input("第一个数:"))
num2 = int(input("第二个数:"))

if choice == 1:
    print(f"{num1}+{num2}={add(num1, num2)}")
elif choice == 2:
    print(f"{num1}-{num2}={subtract(num1, num2)}")
else:
    print("非法输入")
3. 变量作用域

变量的作用域由定义位置决定,分为:

  • 局部变量:在函数内定义,仅在函数执行期间有效,函数结束后销毁。
  • 全局变量:在模块顶层定义,作用域为整个模块,可被所有函数访问。

规则

  1. 函数内可直接访问全局变量,但无法修改(除非用​​global​​声明)。
  2. 当局部变量与全局变量同名时,函数内优先使用局部变量。

示例:全局变量与局部变量

name = "Tim"  # 全局变量

def f1():
    age = 18  # 局部变量
    print(age, name)  # 输出:18 Tim(访问全局变量)

def f2():
    name = "Alice"  # 局部变量(与全局同名)
    print(name)  # 输出:Alice(优先使用局部变量)

f1()
f2()
print(name)  # 输出:Tim(全局变量未被修改)

修改全局变量:global关键字

def f1():
    global name  # 声明name为全局变量
    name = "Tim"  # 修改全局变量
    age = 18
    print(age, name)  # 输出:18 Tim

f1()
print(name)  # 输出:Tim(全局变量已被修改)
4. lambda函数

lambda函数用于创建单行表达式的匿名函数,适用于简单逻辑或作为参数传递。
语法

lambda 形参列表: 表达式

示例:对比普通函数与lambda函数

# 普通函数
def sum1(x, y):
    return x + y

# lambda函数(赋值给变量或直接调用)
sum2 = lambda x, y: x + y
print(sum1(3, 4))  # 7
print(sum2(3, 4))  # 7

限制:lambda函数只能包含一个表达式,不能使用​​if​​​、​​for​​等语句,适合轻量场景。

5. 常用内建函数

Python内置了大量实用函数,无需导入即可直接使用:

  • 数值处理
  • ​abs(x)​​​:返回绝对值(​​abs(-10)​​ → 10)。
  • ​float(x)​​​/​​int(x)​​​:类型转换(​​float("25")​​​ → 25.0,​​int(199.99)​​ → 199)。
  • 布尔判断
  • ​bool(x)​​​:转换为布尔值(0、空字符串、​​None​​​等返回​​False​​​,其余​​True​​)。
  • 序列操作
  • ​range(start, stop, step)​​​:生成整数序列(​​range(0, 5)​​ → 0,1,2,3,4)。
  • ​sum(iterable)​​​:求和(​​sum(range(1, 101))​​ → 5050)。
  • ​max()​​​/​​min()​​​:返回最大/最小值(​​max([6,2,12])​​ → 12)。

二、模块与包

当代码规模扩大时,模块和包用于组织代码,实现跨文件复用。

1. 模块

模块是一个​​.py​​文件,包含函数、类或变量,可被其他文件导入。

定义模块

创建​​myModule.py​​:

# myModule.py
def add(a, b):
    return a + b

def mul(a, b):
    return a * b
导入模块的方式
  1. 导入整个模块
import myModule
print(myModule.add(2, 3))  # 输出:5(通过“模块名.函数名”调用)
  1. 导入指定函数
from myModule import add, mul
print(add(2, 3))  # 输出:5(直接使用函数名)
  1. 别名导入
from myModule import add as add_func
print(add_func(2, 3))  # 输出:5(避免命名冲突)
2. 包

包是包含​​__init__.py​​文件的目录,用于管理多个模块,支持嵌套结构。

目录结构示例
project/
├── project.py
└── subproject/
    ├── __init__.py  # 标识包的存在,可包含初始化代码
    └── submodel.py
包的使用

在​​submodel.py​​中定义函数:

# submodel.py
def add(a, b):
    return a + b

在​​project.py​​中导入包中的模块:

# project.py
import subproject.submodel
print(subproject.submodel.add(1, 3))  # 输出:4

__init__.py的作用

  • 首次导入包时执行,可用于初始化全局变量或批量导入模块。
  • 例如,在​​__init__.py​​​中添加​​from .submodel import add​​​,可简化调用为​​from subproject import add​​。
3. 常用标准库模块

(1) keyword模块:查看Python关键字

import keyword
print(keyword.iskeyword("if"))  # True(判断是否为关键字)
print(keyword.kwlist)  # 输出所有关键字列表

(2) random模块:生成随机数据

import random
print(random.randint(1, 100))  # 1-100随机整数
list1 = ["aaa", "bbb", "ccc"]
print(random.choice(list1))  # 随机选取列表元素
random.shuffle(list1)  # 打乱列表顺序

(3) sys模块:访问解释器环境

import sys
print("Python版本:", sys.version)  # 解释器版本
print("操作系统:", sys.platform)  # 平台信息(如'linux'、'win32')
sys.exit()  # 退出程序

(4) time模块:处理时间数据

import time
print(time.time())  # 当前时间戳(秒级浮点数)
print(time.ctime())  # 可读时间字符串(如'Wed Dec 13 21:33:20 2023')
time.sleep(2)  # 暂停程序2秒

三、总结

  1. 函数设计
  • 保持单一职责,避免函数过于复杂。
  • 合理使用默认参数和关键字参数,提高接口灵活性。
  1. 模块与包
  • 按功能划分模块,避免单文件代码膨胀。
  • 使用​​__init__.py​​规范包的公共接口。
  1. 作用域
  • 尽量减少全局变量,必要时用​​global​​显式声明。
  1. 内置函数与标准库
  • 熟悉常用内建函数,避免重复造轮子。
  • 善用标准库模块(如​​random​​​、​​sys​​)提升开发效率。

通过掌握函数与模块,开发者能写出更简洁、可维护的代码。实践中建议从简单示例入手,逐步尝试复杂场景,最终实现高效的代码组织与复用。

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

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

相关文章

【Spring Boot】深入解析:#{} 和 ${}

1.#{} 和 ${}的使用 1.1数据准备 1.1.1.MySQL数据准备 (1)创建数据库: CREATE DATABASE mybatis_study DEFAULT CHARACTER SET utf8mb4;(2)使用数据库 -- 使⽤数据数据 USE mybatis_study;(3&#xff…

从实验室到产业端:解码 GPU 服务器的八大核心应用场景​

一、深度学习与人工智能的基石​ 在深度学习领域,GPU 服务器的并行计算架构成为训练大规模模型的核心引擎 —— 传统 CPU 集群训练千亿参数模型需数月,而基于某国际知名芯片厂商 H100 的 GPU 服务器可将周期缩短至数周,国内科技巨头 910B 芯…

java—12 kafka

目录 一、消息队列的优缺点 二、常用MQ 1. Kafka 2. RocketMQ 3. RabbitMQ 4. ActiveMQ 5. ZeroMQ 6. MQ选型对比 适用场景——从公司基础建设力量角度出发 适用场景——从业务场景角度出发 四、基本概念和操作 1. kafka常用术语 2. kafka常用指令 3. 单播消息&a…

数据库-数据类型、约束 和 DQL语言

标题目录 数据类型数字类型INT 型BIGINT 型DOUBLE 类型 字符类型定长字符串变长字符串 日期类型 约束主键约束非空约束唯一性约束检查约束外键约束 DQL 语言WHERE 子句连接多个条件IN (列表)NOT IN (列表)BETWEEN...AND...DISTINCT多字段去重 模糊查询NULL 值判断排序&#xff…

Dify升级-linux环境下使用zip离线安装方式部署升级

Dify安装时Linux服务器到github网络不好,git clone拉去不下来代码。使用本地windows电脑下载zip包形式上传进行了安装。但是随着dfiy版本升级,本地使用最新版本的,也需要进行下升级。参考升级指导以及自己环境情况,升级步骤如下。…

基于SpringBoot+Vue的影视系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,影视推荐系统当然不能排除在外。影视系统是在实际应用和软件工程的开发原理之上,运用Java语言以及Spring Boot、VUE框架进行开…

搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)

目录 前言 背景与需求 🎯 需求分析 核心功能 网络优化 方案确认 1. 安装 Flask 和 Ngrok 2. 构建 Flask 应用 3. 使用 Ngrok 实现内网穿透 4. 测试图像生成接口 技术栈 实现流程 优化目标 实现细节 1. 迁移到Flask 2. 持久化提示词 3. 图像下载功能 …

差分信号抗噪声原理:

差分信号抗噪声原理: 差分信号除了能很好地解决发送和接收参考点电位不同的问题外,差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输,外界对它的干扰噪声直接叠加在信号上,接收端直接检测输…

6 种AI实用的方法,快速修复模糊照片

照片是我们记录生活的重要方式。但有时,由于各种原因,照片会变得模糊,无法展现出我们想要的效果。幸运的是,随着人工智能(AI)技术的发展,现在有多种方法可以利用 AI 修复模糊照片,让…

从入门到精通【MySQL】视图与用户权限管理

文章目录 📕1. 视图✏️1.1 视图的基本概念✏️1.2 试图的基本操作🔖1.2.1 创建视图🔖1.2.2 使用视图🔖1.2.3 修改数据🔖1.2.4 删除视图 ✏️1.3 视图的优点 📕2. 用户与权限管理✏️2.1 用户🔖…

C++中的next_permutation全排列函数

目录 什么是全排列用法实现原理自定义比较函数 注意事项相关题目1.AB Problem2.P1088 火星人 什么是全排列 全排列是指从一组元素中按照一定顺序(按字典序排列)取出所有元素进行排列的所有可能情况。 例如,对于集合{1,2,3},它的全排列包括&a…

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式(推荐) */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…

YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】

1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强,显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中,并在物体检测及其他视觉任务中设立了新的性能标准,展现了广泛的应用潜力。 关于CPA-E…

Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)

在进行 Python 项目开发时,一个干净、隔离且配置正确的开发环境至关重要。尤其是在使用像 PyCharm 这样的集成开发环境 (IDE) 时,正确理解和配置虚拟环境 (Virtual Environment) 是避免许多常见问题的关键。本文结合之前安装 Vanna 库时遇到的问题&#…

线上助农产品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码,旨在为农产品销售搭建一个高效、便捷的线上平台,助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架,FastAdmin作为快速开发框架,UniApp作为跨…

基于Matlab的车牌识别系统

1.程序简介 本模型基于MATLAB,通过编程创建GUI界面,基于Matlab的数字图像处理,对静止的车牌图像进行分割并识别,通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等,并定位车牌的文字,实现字符的…

探索 CameraCtrl模型:视频生成中的精确摄像机控制技术

在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…

【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库

深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…

Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力

前引:当算力不再是“奢侈品” ,在人工智能、3D渲染、科学计算等领域,算力一直是横亘在个人与企业面前的“高墙”。高性能服务器价格动辄数十万元,专业设备维护成本高,普通人大多是望而却步。然而,Cephalon算…

Redis的过期删除策略和内存淘汰策略

🤔 过期删除和内存淘汰乍一看很像,都是做删除操作的,这么分有什么意思? 首先,设置过期时间我们很熟悉,过期时间到了,我么的键就会被删除掉,这就是我们常认识的过期删除,…