Python组合数据类型与自定义函数完整指南

花开有时
花开有时
发布时间:2026-10-10 | 4人浏览过
原创

本文系统讲解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

变量作用域管理与全局声明

函数内定义的变量仅在该作用域生效(局部变量)。内外同名变量的交互常引发作用域污染。

作用域冲突导致的NameError报错示例
函数内先使用后定义引发的 NameError 报错日志

1、LEGB 查找原则与报错根因

Python 变量解析严格遵循 LEGB 顺序:Local(局部)→ Enclosing(嵌套闭包)→ Global(全局)→ Built-in(内置)。对于全局变量与函数局部变量:

  1. 函数内部未定义同名变量时,会向上逐级查找全局变量。
  2. 函数内部已定义同名变量时,编译器在读取字节码阶段即将其标记为局部变量。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基础语法与模块化编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表