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. 优先使用关键词参数提高代码可读性,避免位置错误。
相关推荐
Wy. Lsy7 小时前
Kotlin基础学习记录
开发语言·学习·kotlin
The_Killer.7 小时前
格密码--数学基础--06对偶空间与对偶格
学习·线性代数·密码学
彤银浦9 小时前
Web学习笔记3
前端·笔记·学习·html5
之歆9 小时前
Python-魔术方法-创建、初始化与销毁-hash-bool-可视化-运算符重载-容器和大小-可调用对象-上下文管理-反射-描述器-二分-学习笔记
笔记·python·学习
优乐美香芋味好喝9 小时前
2025年7月11日学习笔记&一周归纳——模式识别与机器学习
笔记·学习·机器学习
声网11 小时前
对话 AI 陪伴新宠 Tolan 创始人:拒绝「恋爱脑」,「非人」陪伴更受欢迎?丨 Voice Agent 学习笔记
人工智能·笔记·学习
丁满与彭彭11 小时前
嵌入式学习笔记--MCU阶段--day03中断
笔记·单片机·学习
艾莉丝努力练剑12 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(五)
c语言·开发语言·数据结构·学习·算法
future141212 小时前
游戏开发日记7.12
数据结构·学习·c#·游戏开发
阿群今天学习了吗13 小时前
pytorch环境配置
人工智能·pytorch·python·学习·机器学习