6个月Python学习计划 Day 9 - 函数进阶用法
第一周
Day 1 - Python 基础入门 & 开发环境搭建
Day 2 - 条件判断、用户输入、格式化输出
Day 3 - 循环语句 + range 函数
Day 4 - 列表 & 元组基础
Day 5 - 字典(dict)与集合(set)
Day 6 - 综合实战:学生信息管理系统
Day 7 - 复盘 + 测试日
第二周
Day 8 - Python 函数基础
🎯 今日目标:
- 理解关键字参数、可变参数(*args、**kwargs)
- 掌握函数嵌套和作用域(局部变量与全局变量)
- 学会使用匿名函数(lambda)
- 掌握函数作为参数传递
✅ 1. 关键字参数(Keyword Arguments)
def introduce(name, age):print(f"{name} 今年 {age} 岁")# 位置参数
introduce("小王", 22)# 关键字参数
introduce(age=30, name="小张")
✅ 2. 可变参数:*args 和 **kwargs
# *args:接收多个位置参数(以元组形式接收)
def add_all(*args):return sum(args)print(add_all(1, 2, 3)) # 输出:6# **kwargs:接收多个关键字参数(以字典形式接收)
def print_info(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_info(name="小李", age=18, gender="男")
✅ 3. 作用域:局部变量 vs 全局变量
x = 10 # 全局变量def test():x = 5 # 局部变量print("函数内部 x =", x)test()
print("函数外部 x =", x)
# 使用 global 修改全局变量
count = 0def increase():global countcount += 1increase()
print(count) # 输出:1
✅ 4. 匿名函数 lambda
# lambda 参数: 表达式
square = lambda x: x * x
print(square(5)) # 输出:25# lambda 用作排序的 key 函数
students = [("小明", 85), ("小红", 90), ("小刚", 78)]
students.sort(key=lambda x: x[1], reverse=True)
print(students)
✅ 5. 函数作为参数传递
def apply(func, x, y):return func(x, y)def add(a, b):return a + bprint(apply(add, 3, 4)) # 输出:7
🧠 小练习:
-
编写一个函数 my_sum(*args),可以求任意数量数字的总和。
def my_sum(*args):"""接收任意数量的数字,返回总和。使用内置的 sum() 函数,也可手动遍历。"""return sum(args)# 测试 print(my_sum(1, 2, 3)) # 输出:6 print(my_sum(10, 20, 30, 40)) # 输出:100
-
使用 lambda 表达式对列表 [5, 2, 9, 1] 排序。
# 原始列表 nums = [5, 2, 9, 1]# 升序排序(默认) sorted_nums = sorted(nums, key=lambda x: x) print(sorted_nums) # 输出:[1, 2, 5, 9]# 降序排序 sorted_desc = sorted(nums, key=lambda x: x, reverse=True) print(sorted_desc) # 输出:[9, 5, 2, 1]
-
写一个函数 describe_person(**kwargs),可以打印姓名、年龄、职业等任意信息。
def describe_person(**kwargs):"""接收任意关键字参数,打印个人信息。"""print("=== 个人信息 ===")for key, value in kwargs.items():print(f"{key}:{value}")# 测试 describe_person(姓名="张三", 年龄=25, 职业="程序员") # 输出: # === 个人信息 === # 姓名:张三 # 年龄:25 # 职业:程序员
✅ 今日小结:
-
*args 和 **kwargs 可分别处理不定数量的位置和关键字参数
👉 *args 用于接收任意数量的 位置参数,传入后会以元组的形式存储。
def my_sum(*args):return sum(args)print(my_sum(1, 2, 3)) # 输出:6
👉 **kwargs 用于接收任意数量的关键字参数,传入后会以字典的形式存储。
def show_info(**kwargs):for k, v in kwargs.items():print(f"{k}: {v}")show_info(name="小明", age=20, job="学生")
-
局部变量的作用范围在函数内部,global 可以修改全局变量
💡 局部变量 在函数内部定义,只在当前函数内有效。
def func():x = 5print(x)func() # print(x) # 报错,x 不在全局作用域
💡 全局变量与 global
count = 0def increase():global countcount += 1increase() print(count) # 输出:1
-
lambda 是匿名函数,适合简单逻辑,常用于排序、过滤等操作
lambda 语法简洁,适合定义一次性小函数。
# 一般函数 def square(x):return x * x# lambda 表达式 square = lambda x: x * x print(square(5)) # 输出:25
常见场景:排序、过滤、映射等。
nums = [3, 1, 4, 2] sorted_nums = sorted(nums, key=lambda x: -x) print(sorted_nums) # 输出:[4, 3, 2, 1]
-
函数是“第一类对象”,可以作为参数传递
Python 中,函数可以像变量一样使用,可以:
- 作为参数传递
- 作为返回值返回
- 赋值给其他变量
def add(a, b):return a + bdef apply(func, x, y):return func(x, y)print(apply(add, 3, 5)) # 输出:8