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

Python函数与模块

简介

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

一、函数

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

1. 无参函数

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

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

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

def add():op1 = 10op2 = 20return 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的默认值为6print(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 / yprint("选择运算: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 = 18print(age, name)  # 输出:18 Timf1()
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 + bdef 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​​)提升开发效率。

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

相关文章:

Python函数与模块

简介 在Python编程中,函数和模块是实现代码复用、提高开发效率的核心机制。本文将结合理论与实例,解析Python函数与模块的核心知识点,帮助开发者打下基础。 一、函数 函数是一段可重复调用的代码块,通过参数传递实现灵活的逻辑…...

位运算题目:解码异或后的排列

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:解码异或后的排列 出处:1734. 解码异或后的排列 难度 6 级 题目描述 要求 有一个整数数组 perm \texttt{perm} perm,是前…...

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

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

linux:启动后,ubuntu屏幕变成红色了

屏幕启动后变成 红色背景 通常说明 显卡驱动出了问题,或者是 图形界面加载失败 使用了 fallback 模式。这种现象在 NVIDIA 驱动安装失败或显卡与驱动不兼容时常见。 🎯 先给你几个快速修复选项 ✅ 1. 进入 TTY 命令行界面 按下:Ctrl Alt …...

从实验室到产业端:解码 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…...

YOLOv8 涨点新方案:SlideLoss FocalLoss 优化,小目标检测效果炸裂!

YOLOv8优化秘籍:用SlideLoss和FocalLoss提升小目标检测精度(附代码实战)​​ ​📌 核心问题:YOLOv8在检测小物体时效果不够好?​​ YOLOv8虽然是强大的目标检测模型,但在处理小物体或类别不平…...

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

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

verilog和system verilog常用数据类型以及常量汇总

int和unsigned 在 Verilog-2001 中,没有 int 和 unsigned 这样的数据类型。这些关键字是 SystemVerilog 的特性,而不是 Verilog-2001 的一部分。 Verilog-2001 的数据类型 在 Verilog-2001 中,支持的数据类型主要包括以下几种: …...

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

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

容器修仙传 我的灵根是Pod 第9章 时空禁术(Job与CronJob)

第三卷:上古遗迹元婴篇 第9章 时空禁术(Job与CronJob) 极北冰渊深处,万丈冰层下封印着上古禁术「轮回溯光阵」。 林衍的混沌灵根突然结出冰霜——这不是寒冷所致,而是阵法中逸散的时空乱流。冰壁上刻满血色符文&…...

Web3.0的认知补充(去中心化)

涉及开发技术: Vue Web3.js Solidity 基本认知 Web3.0含义: 新一代互联网思想:去中心化及用户为中心的互联网 数据:可读可写可授权 核心技术:区块链、NFT 应用:互联网上应用 NFT &…...

【Python网络爬虫实战指南】从数据采集到反反爬策略

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:静态页面抓取(电商价格)案例2:动态页面抓取&…...

Atlas 800I A2 离线部署 DeepSeek-R1-Distill-Llama-70B

一、环境信息 1.1、硬件信息 Atlas 800I A2 1.2、环境信息 注意:这里驱动固件最好用商业版,我这里用的社区版有点小问题 操作系统:openEuler 22.03 LTS NPU驱动:Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run NPU固…...

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

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

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

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

Java 21 的“无类主”特性:简化编程的第一步

在Java编程中,编写一个简单的“Hello, World!”程序通常需要以下代码: public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");} }这种结构包含了许多对初学者来说难以理解的概念&#xff…...

AI | 最近比较火的几个生成式对话 AI

关注:CodingTechWork 引言 生成式对话 AI 正在迅速改变我们与机器交互的方式,从智能助手到内容创作,其应用范围广泛且深远。本文将深入探讨几款当前热门的生成式对话 AI 模型,包括 Kimi、DeepSeek、ChatGPT、文心一言、通义千问和…...

差分信号抗噪声原理:

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

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

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

JavaScript 的“积木”:函数入门与实践

引言:告别重复,拥抱模块化 想象一下,你在写代码时发现,有几段逻辑几乎一模一样,需要在不同的地方反复使用。你是选择每次都复制粘贴,还是希望能像搭积木一样,把这段逻辑封装起来,需…...

从入门到精通【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-…...

dockercompose文件仓库

mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…...

【C++入门:类和对象】[3]

C入门:类和对象 拷贝构造(拷贝初始化) 拷贝构造是构造函数的重载 class Date { public:Date(int year1,int month1,int day1) { _yearyear; _monthmonth; _dayday; } Date(const Date& d)//(拷贝构造,把d1传参给d)引用传参不改变使用const //注意使用&,不然会无穷递…...

【mdlib】0 全面介绍 mdlib - Rust 实现的 Markdown 工具集

mdlib 是由开发者 bahdotsh 创建的一个多功能 Markdown 工具集合,包含两个主要组件:一个轻量级 Markdown 解析库和一个功能完善的个人 Wiki 系统。该项目完全采用 Rust 实现,兼具高性能与跨平台特性。 核心组件 Markdown 解析库 特性&#…...

今日CSS学习浮动->定位

------------------------------------------------------------------------------------------------------- CSS的浮动 float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。 float 属性定义元素在哪个方向浮…...

如何实现Spring Boot应用程序的安全性:全面指南

在现代 Web 开发中,安全性是 Spring Boot 应用程序的核心需求,尤其是在微服务、云原生和公开 API 场景中。Spring Boot 结合 Spring Security 提供了一套强大的工具,用于保护应用程序免受常见威胁,如未经授权的访问、数据泄露、跨…...

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

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