Python 学习日记 day26

@浙大疏锦行

以下是整理后的 Python 学习日记,结合知识点解析与代码示例,帮助系统理解函数相关核心概念:

一、函数的定义

作用 :封装可重复使用的代码块,提高代码复用性。
语法

复制代码
def 函数名(参数列表):
    """文档字符串(可选)"""
    函数体
    return 返回值(可选)

示例

复制代码
# 无参数函数
def greet():
    print("Hello, Python!")

# 有参数有返回值函数
def add(a, b):
    return a + b

# 调用函数
greet()          # 输出:Hello, Python!
result = add(3, 5)
print(result)    # 输出:8

二、变量作用域:局部变量 vs 全局变量

1. 局部变量
  • 定义:在函数内部声明的变量,仅在函数内有效。

  • 示例

    复制代码
    def func():
        x = 10  # 局部变量
        print("局部变量 x:", x)
    
    func()       # 输出:局部变量 x: 10
    # print(x)   # 报错:NameError: name 'x' is not defined
2. 全局变量
  • 定义:在函数外部声明的变量,可在全局范围内访问(包括函数内部)。

  • 示例

    复制代码
    count = 5  # 全局变量
    
    def show_count():
        print("全局变量 count:", count)  # 函数内可直接访问全局变量
    
    show_count()  # 输出:全局变量 count: 5
3. 在函数内修改全局变量
  • 若需在函数内修改全局变量,需用 global 关键字声明。

    复制代码
    total = 0
    
    def add_to_total(num):
        global total  # 声明使用全局变量
        total += num
    
    add_to_total(10)
    print(total)  # 输出:10

三、函数的参数类型

1. 位置参数
  • 特点:必须按顺序传递参数,数量与声明一致。

  • 示例

    复制代码
    def user_info(name, age):
        print(f"姓名:{name},年龄:{age}")
    
    user_info("Alice", 25)  # 正确:按位置传递
    # user_info(25, "Alice")  # 错误:顺序错误导致逻辑混乱
2. 默认参数
  • 特点:声明时指定默认值,调用时可省略该参数。

  • 示例

    复制代码
    def user_info(name, age=18):  # age 为默认参数
        print(f"姓名:{name},年龄:{age}")
    
    user_info("Bob")         # 输出:姓名:Bob,年龄:18(使用默认值)
    user_info("Charlie", 30) # 输出:姓名:Charlie,年龄:30(覆盖默认值)
3. 不定参数(可变参数)
  • *args(接收任意数量的位置参数)

    复制代码
    def sum_numbers(*args):
        total = 0
        for num in args:
            total += num
        return total
    
    print(sum_numbers(1, 2, 3))   # 输出:6
    print(sum_numbers(1, 2, 3, 4)) # 输出:10
  • **kwargs(接收任意数量的关键字参数)

    复制代码
    def print_kwargs(**kwargs):
        for key, value in kwargs.items():
            print(f"{key}: {value}")
    
    print_kwargs(name="Alice", age=25, city="New York")

    输出

    复制代码
    name: Alice
    age: 25
    city: New York

四、传递参数的手段:关键词参数

  • 定义 :调用函数时通过 参数名=值 的形式传递参数,无需关注顺序。

  • 示例

    复制代码
    def calculate(a, b, operator):
        if operator == "+":
            return a + b
        elif operator == "-":
            return a - b
    
    # 用关键词参数指定参数名,顺序可任意
    result = calculate(operator="+", a=10, b=5)
    print(result)  # 输出:15

五、传递参数的顺序:同时存在多种参数类型时

当函数同时包含 位置参数、默认参数、*args**kwargs 时,必须严格遵循以下顺序:

复制代码
def func(位置参数, 默认参数, *args, **kwargs):
    pass

示例

复制代码
def example(a, b=10, *args, **kwargs):
    print("位置参数 a:", a)
    print("默认参数 b:", b)
    print("不定位置参数 args:", args)
    print("不定关键字参数 kwargs:", kwargs)

# 调用示例
example(1, 2, 3, 4, c=5, d=6)

输出

复制代码
位置参数 a: 1
默认参数 b: 2
不定位置参数 args: (3, 4)
不定关键字参数 kwargs: {'c': 5, 'd': 6}

总结:核心要点速查表

概念 关键点
函数定义 def 关键字,参数列表,return 返回值
局部变量 函数内声明,作用域仅限函数内
全局变量 函数外声明,需 global 关键字在函数内修改
参数类型 位置参数(必选顺序)、默认参数(可选)、*args(任意位置参数)、**kwargs(任意关键字参数)
关键词参数 参数名=值 传递,忽略顺序
参数传递顺序 位置参数 → 默认参数 → *args**kwargs

学习建议

  1. 多写示例代码,观察参数传递和作用域的实际效果。
  2. 遇到报错时,根据错误信息检查参数数量、类型和顺序是否匹配。
  3. 优先使用关键词参数提高代码可读性,避免位置错误。
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习