Python函数与列表元组全解析

一、函数

1.1函数的定义与作用

编程中的函数是可重复使用的代码片段,类似数学函数(输入不同参数得到不同结果),主要作用是:

  • 消除重复代码,提升代码复用性;
  • 便于代码维护(修改函数即可同步所有调用处)。

示例对比:求不同区间的和时,用函数可将重复的求和逻辑封装,只需调用时传入不同参数。

1.2函数的语法格式

1.定义函数

2.调用函数

1.3函数的核心规则
  1. 定义与调用的关系
    • 函数定义后不会自动执行,必须调用才会执行,调用次数对应执行次数;
    • 函数必须先定义,再调用(否则会报NameError)。
  2. 参数(形参 & 实参)
    • 形参:函数定义时的参数(如calcSum(beg, end)中的begend);
    • 实参:函数调用时传递的实际值(如calcSum(1, 100)中的1100);
    • 规则:形参与实参的数量必须匹配;函数可无参数、单参数或多参数。
1.4函数参数的特性

Python 是动态类型语言,函数形参无需指定类型,可接收多种类型的参数(如同一函数可传入整数、字符串、布尔值)。

  • 注意:调用函数时,实参数量必须与形参匹配,否则会报TypeError
1.5函数返回值

返回值是函数的 "输出"(类比工厂的产品),通过return语句实现,核心规则:

  1. 逻辑与交互分离 :函数应专注于计算逻辑(用return返回结果),而非直接进行用户交互(如打印),便于适配不同的交互场景(保存文件、网络发送等)。
  2. 多 return 语句 :函数可包含多个return,执行到return时函数立即结束并返回。
  3. 多返回值 :函数可通过逗号分隔返回多个值,调用时用多个变量接收;若需忽略部分返回值,可用_占位。

一个函数中可以有多个 return 语句:

执行到 return 语句, 函数就会立即执行结束, 回到调用位置:

一个函数是可以一次返回多个返回值的. 使用 , 来分割多个返回值:

如果只想关注其中的部分返回值, 可以使用 _ 来忽略不想要的返回值:

1.6变量作用域

函数内部定义的变量(局部变量)仅在函数内部生效,外部无法直接访问;函数内外同名变量是不同的独立变量。

  1. 局部变量与全局变量
    • 函数内部定义的是局部变量,仅在函数内生效;
    • 函数外部定义的是全局变量,作用域覆盖整个代码。
  2. 同名变量的独立性 :不同作用域中允许存在同名变量,实际是独立的变量(如函数内外的x互不影响)。
  3. 变量查找逻辑:函数内部访问变量时,先找局部变量;局部不存在则查找全局变量。
  4. 修改全局变量 :函数内修改全局变量需用global关键字声明,否则会被视为创建局部变量。
  5. 语句块不影响作用域if/while/for等语句块内定义的变量,在块外部仍可使用(与函数作用域不同)。
1.7函数的执行过程
  • 函数仅在被调用时执行内部代码,不调用则不执行;
  • 函数执行到return语句或代码结束时,回到调用位置继续执行后续代码。
补充:函数执行的调试方法

可通过 PyCharm 的调试功能观察执行流程:插入断点→以 Debug 模式运行→用Step Into逐行执行。

1.8函数的调用方式
  1. 链式调用 :将一个函数的返回值直接作为另一个函数的参数,简化代码(如print(isOdd(10))替代先赋值再打印)。

2.嵌套调用 :函数内部调用其他函数,可多层嵌套;执行顺序由调用顺序决定(如d()调用c()c()调用b()b()调用a(),则执行顺序为d→c→b→a)。

1.9函数调用栈

Python 用函数调用栈管理函数调用关系:

  • 每次函数调用会在栈中新增一个 "栈帧",存储该函数的局部变量;
  • 函数执行结束后,对应的栈帧会从调用栈中移除;
  • 可通过 PyCharm 调试工具查看调用栈及各栈帧的局部变量。

补充:嵌套调用的执行逻辑

嵌套函数的执行顺序取决于调用语句的位置:若b()中先调用a()再打印,则执行顺序为a→b;若先打印再调用a(),则顺序为b→a

1.10函数递归

递归是函数嵌套调用自身的特殊情况,需满足两个核心条件:

  1. 存在递归结束条件 (如计算阶乘时n == 1);
  2. 实参逐渐逼近结束条件 (如n - 1)。
  • 若条件不满足,会出现 "无限递归",导致RecursionError(调用栈溢出)。
  • 优缺点
    • 优点:代码量少,符合数学归纳法逻辑;
    • 缺点:可读性差、易栈溢出,执行效率低于循环。
1.11参数默认值

函数形参可指定默认值,调用时若不传递该参数,则使用默认值:

  • 规则:带默认值的参数必须放在无默认值参数的后面 ,否则会报SyntaxError
  • 示例:def add(x, y, debug=False)中,debug为默认参数,调用时可省略。
1.12关键字参数

调用函数时,可通过 "形参名=实参值" 的方式显式指定参数,不受形参顺序限制:

  • 示例:test(x=10, y=20)test(y=100, x=200)均合法,参数按指定名称匹配。

二、列表与元组

2.1列表与元组的概念

两者都是批量存储数据的容器,核心区别是可变性

  • 列表:类似 "散装辣条",元素可修改、新增、删除(可变容器);
  • 元组:类似 "包装辣条",元素在创建时固定,无法修改(不可变容器)。
2.2列表的基础操作
  1. 创建列表
    • 空列表:alist = []alist = list()
    • 带初始值:alist = [1, 2, 3],支持不同类型元素 (如[1, 'hello', True])。

2.访问元素(下标)

  • 下标从 0 开始,通过alist[下标]读取 / 修改元素(如alist[2]对应第 3 个元素);
  • 下标越界会报IndexError,有效范围是[0, len(alist)-1]len()可获取列表长度);
  • 支持负下标(如alist[-1]表示倒数第 1 个元素)。
2.3列表的进阶操作

通过下标操作是一次取出里面第一个元素.

通过切片, 则是一次取出一组连续的元素, 相当于得到一个子列表

1.切片 :通过[起始:结束:步长]获取连续子列表,规则:

  • 区间是前闭后开 (如[1:3]取下标 1、2 的元素);
  • 可省略边界([1:]取到末尾,[:-1]取到倒数第 2 个);
  • 步长可正(正向取)、负(反向取),越界不报错。
  • 切片操作中可以省略前后边界
  • 切片操作还可以指定 "步长" , 也就是 "每访问一个元素后, 下标自增几步"
  • 切片操作指定的步长还可以是负数, 此时是从后往前进行取元素. 表示 "每访问一个元素之后, 下标自 减几步"
  • 如果切片中填写的数字越界了, 不会有负面效果. 只会尽可能的把满足条件的元素过去到

2.遍历

  • 也可以使用 for 按照范围生成下标, 按下标访问
  • 还可以使用 while 循环. 手动控制下标的变化

3.新增元素:

  • 使用 append 方法, 向列表末尾插入一个元素(尾插).
  • 使用 insert 方法, 向任意位置插入一个元素

insert 第一个参数表示要插入元素的下标.

4.查找元素
  • 使用 in 操作符, 判定元素是否在列表中存在. 返回值是布尔类型.
  • 使用 index 方法, 查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常.
5.删除元素
  • 使用 pop 方法删除最末尾元素
  • pop 也能按照下标来删除元素
  • 使用 remove 方法, 按照值删除元素.

6.连接列表

  • 使用 + 能够把两个列表拼接在一起.

此处的 + 结果会生成一个新的列表. 而不会影响到旧列表的内容.

  • 使用 extend 方法, 相当于把一个列表拼接到另一个列表的后面.

a.extend(b) , 是把 b 中的内容拼接到 a 的末尾. 不会修改 b, 但是会修改 a.

2.4元组的核心特性
  • 定义 :用()表示,功能与列表类似,但元素不可修改
  • 支持操作 :仅支持读操作 (下标、切片、遍历、inindex+),不支持写操作(修改、增删);
  • 优势
    1. 数据安全(避免函数乱改数据);
    2. 可作为字典的键(列表不可,因字典键需为不可变对象);
  • 应用场景:函数多返回值默认是元组。
2.5列表与元组的选择
  • 元素需修改→选列表;
  • 元素无需修改→选元组(更安全、支持字典键)。
相关推荐
臭东西的学习笔记1 天前
论文学习——机器学习引导的蛋白质工程
人工智能·学习·机器学习
Rabbit_QL1 天前
【水印添加工具】从零设计一个工程级 Python 图片水印工具:WaterMask 架构与实现
开发语言·python
ghgxm5201 天前
Fastapi_00_学习方向 ——无编程基础如何用AI实现APP生成
人工智能·学习·fastapi
求真求知的糖葫芦1 天前
巴伦学习(一)一种新型补偿传输线巴伦论文学习笔记(自用)
笔记·学习·射频工程
沉默-_-1 天前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
曲幽1 天前
FastAPI多进程部署:定时任务重复执行?手把手教你用锁搞定
redis·python·fastapi·web·lock·works
freepopo1 天前
书房设计|3㎡书桌角,治愈学习时光 [特殊字符]
学习
鑫—萍1 天前
嵌入式开发学习——STM32单片机入门教程
c语言·驱动开发·stm32·单片机·嵌入式硬件·学习·硬件工程
森屿~~1 天前
AI 手势识别系统:踩坑与实现全记录 (PyTorch + MediaPipe)
人工智能·pytorch·python
S火星人S1 天前
LVGL[display]
单片机·学习