Files

6.6 KiB
Raw Permalink Blame History

第 1-12 课:函数

一、本课目标

完成本课后,你将能够:

  1. 理解函数是什么,以及为什么需要函数;
  2. 使用 def 定义函数;
  3. 调用函数并传递参数;
  4. 使用返回值把结果交给调用者;
  5. 区分“打印结果”和“返回结果”;
  6. 使用默认参数和关键字参数;
  7. 理解局部变量和全局变量的基本区别;
  8. 为简单函数编写文档字符串;
  9. 把重复代码整理成可复用的函数。

二、前置知识

  • 变量和数据类型;
  • 条件判断;
  • for 循环;
  • 字符串、列表、字典和集合;
  • 基本的布尔判断。

三、函数是什么

函数Function是一段有名字、可以重复执行的代码。

例如,下面的代码每次都能完成同一件事:

def say_hello():
    print("你好Python")

定义函数不会立即执行函数体。只有调用它时,代码才会运行:

say_hello()

可以把函数理解为一个“工具盒”:

  • 定义函数:制作工具;
  • 调用函数:使用工具;
  • 参数:交给工具的材料;
  • 返回值:工具加工后的结果。

四、定义和调用函数

基本格式:

def 函数名():
    函数体

注意:

  1. def 是定义函数的关键字;
  2. 函数名建议使用英文蛇形命名;
  3. 函数体必须缩进;
  4. 函数定义后需要通过 函数名() 调用。

示例:

def print_separator():
    print("=" * 30)


print_separator()

五、参数:把数据交给函数

5.1 一个参数

def greet_user(name):
    print(f"你好,{name}")


greet_user("小明")

name 是参数Parameter"小明" 是调用时传入的实参Argument

5.2 多个参数

def print_agent(name, model):
    print(f"Agent{name},模型:{model}")


print_agent("代码助手", "gpt-5")

参数按位置传递时,顺序很重要。

5.3 关键字参数

也可以明确写出参数名:

print_agent(model="gpt-5", name="代码助手")

使用关键字参数后,调用顺序可以调整,可读性也更好。

六、返回值:把结果交给调用者

return 用于结束函数执行,并把结果返回给调用者:

def add_numbers(first_number, second_number):
    return first_number + second_number


total = add_numbers(3, 5)
print(total)

return 后面的结果可以保存到变量、参与计算或传给其他函数。

七、打印和返回的区别

下面两个函数看起来相似,但用途不同:

def print_total(first_number, second_number):
    print(first_number + second_number)


def get_total(first_number, second_number):
    return first_number + second_number

前者只负责显示,调用者不能直接拿到计算结果;后者把结果交给调用者,更适合程序继续处理。

result = get_total(3, 5)
print(result * 2)

如果函数没有写 returnPython 会自动返回 None,表示“没有结果”。

八、默认参数

可以为参数准备默认值:

def create_agent(name, model="gpt-5"):
    return f"{name} 使用 {model}"


print(create_agent("代码助手"))
print(create_agent("搜索助手", "o3"))

调用时不传 model,就使用 "gpt-5";传入了新值,就使用新值。

默认参数通常放在普通参数后面。

九、函数中的条件和循环

函数体可以包含前面学过的条件和循环:

def count_enabled_agents(agents):
    enabled_count = 0

    for agent in agents:
        if agent["enabled"]:
            enabled_count += 1

    return enabled_count

函数的价值之一,就是把一段有明确目的的处理逻辑集中起来。

十、变量作用域

作用域Scope表示变量可以被使用的范围。

message = "这是全局变量"


def show_message():
    local_message = "这是局部变量"
    print(message)
    print(local_message)


show_message()
  • 在函数外定义的变量通常称为全局变量;
  • 在函数内定义的变量通常是局部变量;
  • 函数执行结束后,局部变量通常不能在函数外直接使用。

入门阶段建议:通过参数传入数据,通过 return 返回结果,少依赖全局变量。

十一、文档字符串

函数第一行的字符串可以作为文档字符串Docstring说明函数的用途

def is_agent_enabled(agent):
    """判断 Agent 是否处于启用状态。"""
    return agent["enabled"]

文档字符串会帮助自己和其他开发者理解函数。

十二、运行本课示例

进入项目根目录:

cd D:\Code\Python

运行示例:

python .\01_python基础\1_12_函数\functions.py

运行练习:

python .\01_python基础\1_12_函数\practice.py

十三、常见错误

13.1 忘记调用函数

只写 def 是定义,不会自动执行,必须写 函数名()

13.2 函数体没有缩进

def 下一行开始的函数体必须缩进,通常使用四个空格。

13.3 参数数量不匹配

函数需要两个参数却只传一个,会出现 TypeError,中文意思是参数数量或类型不正确。

13.4 把 print() 当成 return

print() 负责显示,return 负责把结果交给调用者。

13.5 忘记接收返回值

函数返回的结果如果后续还要使用,应保存到变量中。

13.6 过度使用全局变量

优先使用参数和返回值传递数据,让函数更容易测试和复用。

十四、课堂练习

打开:

01_python基础/1_12_函数/practice.py

本课练习将创建“Agent 文本处理工具箱”,逐步完成:

  1. 无参数问候函数;
  2. 带参数的 Agent 信息函数;
  3. 返回字符串的函数;
  4. 带默认参数的配置函数;
  5. 使用条件和循环统计 Agent
  6. 使用函数整理工具权限和模型记录。

十五、本课小结

  1. 函数是可重复使用的代码块;
  2. def 定义函数,调用函数时使用括号;
  3. 参数用于输入数据;
  4. return 用于返回结果;
  5. print()return 的用途不同;
  6. 默认参数可以减少重复传值;
  7. 局部变量和全局变量的作用范围不同;
  8. 函数应尽量职责单一、名称清晰。

十六、验收标准

  • 能独立定义并调用函数;
  • 能正确传递一个或多个参数;
  • 能区分打印和返回;
  • 能使用默认参数;
  • 能从函数外接收返回值;
  • 能使用函数处理列表或字典;
  • 示例和练习均可正常运行;
  • 函数名和变量名符合英文蛇形命名规范。