一、函数是什么?
函数是把一段可重复使用的代码打包起来,起一个名字,需要时直接调用。
好处:
二、函数的定义与调用
1. 定义函数(def 关键字)
def函数名(参数1, 参数2, ...):
函数体代码
return 返回值
要点:
2. 最简单函数(无参无返回值)
defsay_hello():
print("Hello Python")
3. 调用函数
函数定义后不会自动运行,必须调用才执行。
say_hello()
4. 完整示例
# 定义
defadd(a, b):
c = a + b
print(c)
# 调用
add(3, 5) # 输出 8
三、函数参数传递(核心重点)
1. 位置参数
调用时按顺序传递,一一对应。
definfo(name, age):
print("姓名:", name, "年龄:", age)
info("小明", 18)
顺序不能乱,乱了结果就错。
2. 关键字参数
调用时指定参数名,顺序可以任意。
info(name="小红", age=20)
info(age=22, name="小刚")
好处:不怕传错顺序。
3. 默认参数(缺省参数)
定义函数时给参数设置默认值,调用时不传该参数就用默认值。
definfo(name, age, city="北京"):
print(name, age, city)
调用:
info("小明", 18) # city 默认北京
info("小红", 20, "上海") # 覆盖默认值
注意规则:
四、可变参数(*args 和 **kwargs)
1. *args 可变位置参数
接收任意多个位置参数,自动打包成元组 tuple。
deffunc(*args):
print(args)
func(1, 2, 3)
func("a", "b")
func()
输出:
(1, 2, 3)
('a', 'b')
()
示例:求和函数
defsum_all(*args):
total = 0
for n in args:
total += n
return total
print(sum_all(1,2,3,4,5)) # 15
2. **kwargs 可变关键字参数
接收任意多个关键字参数,自动打包成字典 dict。
deffunc(**kwargs):
print(kwargs)
func(name="小明", age=18)
输出:
{'name': '小明', 'age': 18}
3. 混合使用顺序(必须记住)
def函数名(位置参数, 默认参数, *args, **kwargs):
完整示例:
deftest(a, b=10, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
五、返回值 return
1. return 作用
2. 无 return
函数默认返回 None
deff():
print(123)
print(f()) # None
3. 有 return
defadd(a, b):
return a + b
res = add(3,4)
print(res) # 7
4. 返回多个值
返回多个值会自动打包成元组。
defget_user():
return"小明", 18, "北京"
name, age, city = get_user()
5. return 后代码不执行
deftest():
print(1)
return
print(2) # 不会执行
六、参数传递的重要知识点
1. 不可变类型:数字、字符串、元组
函数内部修改不会影响外部变量。
deffunc(x):
x = 100
a = 10
func(a)
print(a) # 10 不变
2. 可变类型:列表、字典
函数内部修改会影响外部。
deffunc(lst):
lst.append(4)
my_list = [1,2,3]
func(my_list)
print(my_list) # [1,2,3,4]
七、作用域(简单说明)
- • 外部定义的叫全局变量,函数内可读但不能直接修改
📚 综合练习题(带详细讲解)
练习1
定义函数求两个数的最大值,用 return 返回。
defmax_num(a, b):
return a if a > b else b
print(max_num(10, 20))
答案:20
练习2
定义函数,接收任意多个数字,返回它们的平均值。
defavg(*args):
returnsum(args) / len(args)
print(avg(1,2,3,4)) # 2.5
练习3
函数带默认参数、关键字参数调用。
defstudent(name, age, cls="一年级"):
print(name, age, cls)
student(age=9, name="小王")
答案:小王 9 一年级
练习4
return 多个值并解包。
defcal(a, b):
return a+b, a-b, a*b
add, sub, mul = cal(10, 2)
print(add, sub, mul)
答案:12 8 20
📝 本章超级总结
- 1. def 函数名(): 定义函数,调用用
函数名() - 6. **kwargs:接收任意多个关键字参数 → 字典
- 7. return:返回结果并结束函数,可返回多个值