一、什么是函数?
函数 是一段组织好的、可重复使用的、用来实现特定功能的代码块。函数可以接受输入(参数),经过处理后返回输出(返回值)。Python 提供了许多内置函数(如 print()、len()),同时也允许你定义自己的函数。
# 定义一个简单的函数defgreet():print("Hello, World!")# 调用函数greet() # 输出:Hello, World!
二、为什么使用函数?
- • 模块化:将复杂问题分解为小问题,每个函数解决一个子任务。
三、定义函数
使用 def 关键字定义函数,基本语法:
def函数名(参数列表):"""文档字符串(可选)""" 函数体return 返回值 # 可选
示例:无参数无返回值的函数
defsay_hello():print("你好!")
示例:有参数有返回值的函数
defadd(a, b): result = a + breturn result
四、调用函数
函数定义后,通过 函数名(参数) 的形式调用。
# 调用无参函数say_hello()# 调用有参函数sum = add(3, 5)print(sum) # 8
注意:函数必须先定义后调用(解释器执行到 def 时才会创建函数对象)。

五、参数传递
5.1 位置参数
调用时按参数定义的顺序传递值。
defdescribe_pet(name, animal):print(f"{name} 是一只 {animal}")describe_pet("旺财", "狗") # 旺财 是一只 狗
5.2 关键字参数
调用时通过 参数名=值 的形式指定,可以不考虑顺序。
describe_pet(animal="猫", name="咪咪") # 咪咪 是一只 猫
5.3 默认参数
定义函数时给参数指定默认值,调用时若未提供该参数,则使用默认值。
defgreet(name, greeting="你好"):print(f"{greeting},{name}")greet("小明") # 你好,小明greet("小红", "早上好") # 早上好,小红
注意:默认参数必须放在位置参数之后。
5.4 可变参数
有时需要处理不定数量的参数,Python 提供了两种方式:
*args —— 接收任意数量的位置参数,打包成元组
defsum_all(*numbers): total = 0for n in numbers: total += nreturn totalprint(sum_all(1, 2, 3)) # 6print(sum_all(10, 20, 30, 40)) # 100
**kwargs —— 接收任意数量的关键字参数,打包成字典
defprint_info(**info):for key, value in info.items():print(f"{key}: {value}")print_info(name="张三", age=25, city="北京")# 输出:# name: 张三# age: 25# city: 北京
5.5 参数组合顺序
定义函数时,参数顺序应为:位置参数、默认参数、*args、关键字参数(命名关键字参数)、**kwargs。
六、返回值
使用 return 语句返回结果。函数可以返回任意类型的值,也可以返回多个值(实际上打包成元组)。
defmax_min(a, b):if a > b:return a, b # 返回两个值,实际上是元组else:return b, amax_val, min_val = max_min(10, 5)print(max_val, min_val) # 10 5
七、变量作用域
- • 局部变量:在函数内部定义的变量,只能在函数内部访问。
- • 全局变量:在函数外部定义的变量,可以在函数内部读取,但修改需要使用
global 声明。
x = 10# 全局变量deffunc(): y = 5# 局部变量global x x = 20# 修改全局变量print("内部:", x, y)func()print("外部:", x) # 20# print(y) # 报错:NameError
八、文档字符串(docstring)
在函数定义的第一行用三引号写文档字符串,说明函数的功能、参数、返回值等。可通过 help(函数名) 或 函数名.__doc__ 查看。
defadd(a, b):""" 返回两个数的和。 参数: a (int/float): 第一个数 b (int/float): 第二个数 返回: int/float: a + b 的结果 """return a + bhelp(add)
九、实战案例
案例1:计算器函数
defcalculator(x, y, op):"""简易计算器"""if op == '+':return x + yelif op == '-':return x - yelif op == '*':return x * yelif op == '/':if y == 0:return"除数不能为0"return x / yelse:return"不支持的运算符"print(calculator(10, 5, '+')) # 15print(calculator(10, 5, '/')) # 2.0
案例2:检查密码强度
defpassword_strength(pwd):""" 返回密码强度评级 """iflen(pwd) < 6:return"弱"elif pwd.isdigit() or pwd.isalpha():return"中"else:return"强"print(password_strength("123456")) # 中print(password_strength("abc123!@")) # 强
案例3:生成斐波那契数列
deffibonacci(n):"""返回前n个斐波那契数的列表""" result = [] a, b = 0, 1for _ inrange(n): result.append(a) a, b = b, a + breturn resultprint(fibonacci(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
案例4:可变参数求平均值
defaverage(*nums):ifnot nums:return0returnsum(nums) / len(nums)print(average(1, 2, 3, 4)) # 2.5print(average()) # 0
案例5:递归函数(阶乘)
deffactorial(n):"""计算 n! (递归实现)"""if n == 0:return1else:return n * factorial(n-1)print(factorial(5)) # 120
十、总结
- • 函数用
def 定义,通过 函数名() 调用。 - • 参数可以是位置参数、关键字参数、默认参数、可变参数。
- • 使用
return 返回值,无 return 则返回 None。 - • 函数内部变量是局部的,修改全局变量需用
global。
掌握函数是编写结构化、可复用代码的关键一步。多写多练,让函数成为你的得力助手!
