Python组合数据类型与自定义函数完整指南
本文系统讲解Python中的组合数据类型(元组与字典)及其核心方法,深入剖析自定义函数的参数传递规则、变量作用域管理机制(含LEGB原则与global用法),并梳理模块导入规范与__name__属性的实际应用场景。
组合数据类型的核心特性与操作方法
Python提供了多种组合数据结构。除上一节介绍的列表外,元组与字典是日常开发中最常用的两种类型。
1、元组(Tuple)
元组与列表在结构上相似,支持存放多种数据类型,但具有不可变性:创建后无法进行删除、插入或修改元素等操作。元组的创建形式为包含在一对小括号内的元素集合。系统内置类型标识为 tuple,可通过 tuple() 创建空元组或进行强制类型转换。
2、字典(Dictionary)
字典采用键值对(Key-Value)结构存储数据。其核心规则如下:
- 键必须是唯一的且不可变(如字符串、数字、元组),因此键不能使用列表或字典。
- 值可以是任意数据类型,允许多个键映射到相同的值。
- 系统类型为
dict,可使用dict()初始化空字典。
基础操作代码如下:
a = dict()
# 创立一个键为1,值为张三的键值对
a[1] = "张三"
print(a[1]) # 输出:张三
3、字典常用方法
| 方法 | 功能说明 |
|---|---|
.clear() | 清空字典内所有元素,返回空字典。若需彻底删除字典对象,使用 del a。 |
.get(参数1, 参数2) | 查询指定键的值。若存在则返回值;若不存在则返回参数2。省略参数2时默认返回 None。 |
.keys() | 返回字典中所有键的视图对象。 |
.values() | 返回字典中所有值的视图对象。 |
.items() | 返回字典中所有键值对的视图对象。 |
.pop(参数) | 根据键删除对应的键值对,并返回被删除项的值。 |

注:上述图示中演示了遍历时的换行控制。print() 函数默认 end="\n" 会自动换行。在实际排版或单行展示时,可传入 end="" 取消换行,或使用 end="\t" 添加制表缩进。
4、数据维度与应用场景
在数据表示层面,列表通常用于处理一维或二维结构化数据;而字典凭借其灵活的键值映射关系,非常适合构建高维信息模型与复杂配置表。
5、实战案例:学生投票统分逻辑
# 创建列表暂存原始输入
votes_input = []
while True:
name = input("请输入投票的名字(输入‘结束’停止):")
if name != "结束":
votes_input.append(name)
else:
break
# 使用字典进行频次统计
result_dict = {}
for name in votes_input:
# get方法第二个参数设为初始值0,实现自动累加
result_dict[name] = result_dict.get(name, 0) + 1
print(result_dict)
自定义函数的定义与参数规则
函数是将特定逻辑封装为独立工具的标准方式,能显著减少重复代码。Python内置了 print() 等函数,开发者也可按需自定义。
1、函数基础结构
def function_name(param):
"""函数注释或文档字符串"""
# 业务逻辑代码块
return value # 可选,决定函数调用后的返回值
2、形参与实参
形参(Formal Parameter)指定义函数时在括号内声明的变量占位符;实参(Actual Parameter)指调用函数时实际传入的具体数值或对象。两者在内存中各自独立。
3、默认参数
在定义函数时为形参赋初始值。调用时若未传该参数,则使用默认值;若传入新值,则覆盖默认值。例如:def greet(name="Guest"):
4、可变参数与关键字参数
当参数数量不确定时,可使用特殊符号聚合:
- 可变参数(*args):接收多余的位置参数,打包为元组。必须放在必填参数右侧,例如:
def func(required, *args): - 关键字参数(**kwargs):接收多余的命名参数,打包为字典。传入时需严格遵循
键=值格式,例如:def func(**kwargs):
5、Lambda匿名函数
适用于编写简短的一行表达式,常作为高阶函数的回调参数或临时计算逻辑。语法结构:lambda 参数: 表达式。例如计算平方:square = lambda x: x ** 2
变量作用域管理与全局声明
函数内定义的变量仅在该作用域生效(局部变量)。内外同名变量的交互常引发作用域污染。

1、LEGB 查找原则与报错根因
Python 变量解析严格遵循 LEGB 顺序:Local(局部)→ Enclosing(嵌套闭包)→ Global(全局)→ Built-in(内置)。对于全局变量与函数局部变量:
- 函数内部未定义同名变量时,会向上逐级查找全局变量。
- 函数内部已定义同名变量时,编译器在读取字节码阶段即将其标记为局部变量。Python 不存在变量提升机制(不同于 JavaScript),若先读取后赋值,将触发
NameError。
2、global 声明的作用
若确需在函数内修改外部全局变量,必须使用 global 关键字显式声明。声明后,局部变量与全局变量指向同一内存地址,函数内的修改将直接同步至外部环境。
模块导入规范与 __name__ 属性
当逻辑较为庞大或需复用他人代码时,标准库与第三方模块的引入至关重要。
1、模块导入语法
- 整体导入:
import 模块名。调用时使用模块名.函数名()。解释器会在运行时加载该文件顶层代码(跳过函数体),调用时才执行对应逻辑。 - 指定导入:
from 模块名 import 函数名。可直接调用函数名()。 - 通配符导入:
from 模块名 import *。一次性导入公开接口,注意防范命名空间冲突。 - 别名机制:使用
as为模块或函数重命名,便于适应不同项目规范,如import numpy as np。
2、__name__ 属性的实际用途
每个 Python 文件都有一个内置属性 __name__。当脚本作为入口程序直接运行时,该值为字符串 '__main__';当文件被其他脚本 import 时,该值等于文件名。此特性常用于区分测试代码与生产逻辑:
if __name__ == '__main__':
test_function()
以上就是Python组合数据类型与函数定义的详细内容,更多关于Python基础语法与模块化编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









