当前位置:首页>python>Python函数——代码复用的基石

Python函数——代码复用的基石

  • 2026-09-17 00:30:22
Python函数——代码复用的基石

一、什么是函数?

函数 是一段组织好的、可重复使用的、用来实现特定功能的代码块。函数可以接受输入(参数),经过处理后返回输出(返回值)。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 语句返回结果。函数可以返回任意类型的值,也可以返回多个值(实际上打包成元组)。

  • • 如果没有 return,函数返回 None。
  • • 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。
  • • 文档字符串可以提高代码可读性和可维护性。

掌握函数是编写结构化、可复用代码的关键一步。多写多练,让函数成为你的得力助手!

最新文章

随机文章