Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
上一期小练习解答(第3期回顾)
✅ 练习1:创建一个列表,添加5个名字,并用循环打印
names = ["Alice", "Bob", "Charlie", "David", "Eva"]
for name in names:print(name)
✅ 练习2:定义一个学生信息字典并打印
student = {"name": "Tom", "age": 20, "score": 88}
print(f"姓名:{student['name']},年龄:{student['age']},成绩:{student['score']}")
✅ 练习3:集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print("并集:", a | b) # {1, 2, 3, 4, 5, 6}
print("交集:", a & b) # {3, 4}
print("差集:", a - b) # {1, 2}
本期主题:函数的定义与使用
在 Python 中,函数用于组织可重用的代码,是程序模块化的基础。
4.1 函数的定义和调用
✅ 定义函数语法:
def 函数名(参数1, 参数2, ...):函数体return 返回值
def greet(name):return f"你好,{name}!"print(greet("张三"))
4.2 函数参数详解
📌 位置参数
定义:最常用的参数,按顺序传递给函数。
def add(a, b):return a + bprint(add(3, 5)) # 输出 8
📌 默认参数
定义:为某些参数提供默认值,调用函数时可以省略。
def greet(name="游客"):print("你好,", name)greet() # 输出:你好, 游客
greet("小明") # 输出:你好, 小明
📌 注意事项:
-
默认参数必须放在位置参数之后。
-
默认参数的值只会在定义函数时计算一次,避免使用可变对象作为默认值(如 list、dict)。
错误示例:
def append_list(val, mylist=[]): # ❌ 不推荐mylist.append(val)return mylist
推荐写法:
def append_list(val, mylist=None):if mylist is None:mylist = []mylist.append(val)return mylist
📌 关键字参数
def student_info(name, age):print(f"{name}今年{age}岁")student_info(age=18, name="小红")
📌 可变参数:*args
和 **kwargs
可变参数定义
:用于接收任意数量的位置参数,自动打包为元组。你可以理解 *args
是在函数内部把多个参数打包成一个元组。
**kwargs定义:
用于接收任意数量的键值对参数,自动打包为字典。**kwargs
通常用于函数参数不确定、或者需要灵活传参时。
# args 位置可变参数
def total(*args):return sum(args)print(total(1, 2, 3, 4)) # 输出 10# kwargs 关键字可变参数
def print_info(**kwargs):for k, v in kwargs.items():print(f"{k}: {v}")print_info(name="Tom", age=18)
函数参数顺序口诀(八股文)
在定义函数时,如果你使用了所有类型的参数,它们的顺序必须是:
位置参数 → 默认参数 → *args → 命名关键字参数(*arg)→ **kwargs
示例
def all_params(a, b=2, *args, c, d=4, **kwargs):print(a, b)print("args:", args)print("c:", c)print("d:", d)print("kwargs:", kwargs)all_params(1, 3, 5, 6, c=10, d=20, e=99, f=100)
输出:
1 3
args: (5, 6)
c: 10
d: 20
kwargs: {'e': 99, 'f': 100}
参数类型 | 使用符号 | 作用说明 |
---|---|---|
位置参数 | 无符号 | 正常按顺序传参 |
默认参数 | = | 设置默认值,放在位置参数后 |
可变参数 | *args | 接收任意位置参数,打包为元组 |
命名关键字参数 | *, param | 只能使用关键字方式传参 |
关键字参数 | **kwargs | 接收任意关键字参数,打包为字典 |
4.3 函数的返回值
函数可以返回任意类型的值,也可以返回多个值(自动打包为元组)。
def calc(a, b):return a + b, a * bs, m = calc(3, 5)
print("和:", s)
print("积:", m)
4.4 匿名函数 lambda 表达式
lambda
表达式可快速定义简单函数,一般用于函数作为参数的场合。
# 普通函数
def square(x):return x ** 2# lambda 等价写法
square = lambda x: x ** 2
print(square(4)) # 输出 16
4.5 变量作用域(Scope)
变量作用域决定了变量的可见性:
-
局部变量:函数内部定义的变量
-
全局变量:函数外部定义的变量
-
global
关键字:在函数中声明全局变量
x = 5 # 全局变量def change():global xx = 10 # 修改全局变量change()
print(x) # 输出 10
本期小练习:
-
编写一个函数,接收一个整数,判断它是否是偶数。
-
编写一个函数,接收多个成绩,返回它们的平均值。
-
用
lambda
表达式对一组字符串按长度排序:["apple", "kiwi", "banana", "pear"]
小结:
本期你学习了 Python 函数的定义、调用、参数、返回值、匿名函数和作用域知识。掌握函数是写出高质量、可维护代码的关键。
第5期预告:
下一期我们将讲解:
-
模块与包的导入
-
Python标准库介绍
-
自定义模块的创建和使用