函数
掌握函数的多种参数类型
理解函数的作用域
了解递归函数的基本使用
核心讲解
(1)四种参数类型
位置参数按顺序传递参数,调用时顺序和数量必须和定义一致,是最基础的参数。
默认参数定义函数时给参数设置默认值,调用时可以不传,不传就用默认值。默认参数必须写在位置参数后面。
关键字参数调用时用 参数名=值 的方式传参,可以不按顺序,更清晰。
*args:接收任意多个位置参数,打包成元组**kwargs:接收任意多个关键字参数,打包成字典
(2)函数的返回值进阶
可以返回多个值,用逗号分隔,本质是返回一个元组
没有 return 语句,默认返回 None
(3)变量作用域
局部变量:函数内部定义的变量,只能在函数内部使用,函数结束就销毁
全局变量:函数外部定义的变量,整个文件都能访问;函数内部修改全局变量需要用
global声明
(4)递归函数
函数自己调用自己就是递归,适合解决结构相似的问题。递归必须有终止条件,否则会死循环。
代码示例
# ===== 多种参数 =====
def student_info(name, age, major="计算机", gender="男"):
"""
学生信息函数
name, age:位置参数
major, gender:默认参数
"""
print(f"姓名:{name},年龄:{age}")
print(f"专业:{major},性别:{gender}")
# 位置参数调用
student_info("张三", 20)
# 关键字参数调用
student_info("李四", 19, gender="女", major="软件工程")
# ===== 可变参数 =====
# 任意多个数求和
def sum_nums(*args):
total = 0
for num in args:
total += num
return total
print(sum_nums(1,2,3))
print(sum_nums(1,2,3,4,5))
# 关键字可变参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="王五", age=22, city="北京")
# ===== 多返回值 =====
def calc(a, b):
return a+b, a-b, a*b
add, sub, mul = calc(10, 5)
print(add, sub, mul)
# ===== 递归函数 =====
# 计算阶乘
def factorial(n):
# 终止条件
if n == 1:
return 1
# 自己调用自己
return n * factorial(n-1)
print("5的阶乘:", factorial(5))
常见误区
默认参数顺序错:默认参数必须放在位置参数后面
可变参数混用:
*args必须在**kwargs前面函数内部修改全局变量忘加 global:不加 global 会被当成局部变量
递归没有终止条件:会导致栈溢出报错,递归深度不要太深
课后练习
编写一个函数,接收任意多个数字,返回它们的平均值
编写一个函数,有默认参数,实现打招呼功能,可以指定问候语,默认是 “你好”
用递归实现斐波那契数列,输出第 10 个数

