一、函数的概念(What is a Function)
函数是组织好的、可重复使用的代码块,用于实现特定的功能。函数能提高程序的模块化和复用性,是 Python 最基本的构造之一。
二、函数的定义与调用
1. 基本语法
def 函数名(参数1, 参数2, ...):
"""[可选]函数说明文档"""
函数体
return 返回值
2. 示例:最简单的函数
def greet():
print("Hello, world!")
greet() # 调用函数
三、参数详解(Function Parameters)
Python 函数支持多种参数类型:
1. 位置参数(Positional Arguments)
def add(a, b):
return a + b
print(add(3, 5)) # 输出 8
2. 默认参数(Default Parameters)
def greet(name="World"):
print(f"Hello, {name}!")
greet() # Hello, World!
greet("Alice") # Hello, Alice!
✅ 默认参数必须放在位置参数之后
3. 可变参数(*args)
用于传入任意多个位置参数,在函数内部是一个 tuple
。
def total(*numbers):
return sum(numbers)
print(total(1, 2, 3)) # 输出 6
4. 关键字参数(**kwargs)
接收任意多个关键字参数,在函数内部是一个 dict
。
def print_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
print_info(name="Tom", age=18)
5. 参数组合(推荐顺序)
def func(a, b=0, *args, **kwargs):
pass
顺序是:
位置参数 → 默认参数 → *args → **kwargs
四、变量作用域(Scope)
作用域决定变量的可访问范围。
1. 局部变量(Local)
在函数内定义,只能在函数内访问。
def func():
x = 10 # 局部变量
print(x)
func()
# print(x) # 报错:x 未定义
2. 全局变量(Global)
在函数外定义,整个文件都能访问。
x = 100
def show():
print(x) # 访问全局变量
show()
3. 修改全局变量
必须用 global
关键字:
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1
4. 闭包变量 & nonlocal
def outer():
x = 10
def inner():
nonlocal x
x += 1
print(x)
inner()
outer() # 输出 11
五、返回值 return
return
用于从函数中返回值,函数执行到 return
就结束。
1. 返回一个值
def square(x):
return x * x
2. 返回多个值(元组)
def stats(a, b):
return a + b, a * b
s, p = stats(3, 4)
print(s, p) # 输出:7 12
3. 没有 return 时默认返回 None
六、函数的注意事项与最佳实践
注意点 | 说明 |
---|---|
函数名应见名知意 | 避免起名如 fun1 、do_stuff |
使用文档字符串 | 用 """说明""" 描述函数用途 |
避免参数命名与全局变量冲突 | 否则容易混淆作用域 |
多返回值建议用解构接收 | 如:a, b = func() |
函数不要做太多事 | 单一职责,便于维护 |
七、实用示例大全
1. 递归函数(阶乘)
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
2. 判断质数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
3. 判断回文字符串
def is_palindrome(s):
return s == s[::-1]
4. 函数嵌套
def outer():
def inner():
print("内部函数")
inner()
5. 函数作为参数传递(高阶函数)
def apply(func, value):
return func(value)
print(apply(abs, -5)) # 5
6. lambda 匿名函数(简写)
square = lambda x: x * x
print(square(4)) # 16
八、练习题推荐
- 编写一个函数判断一个字符串是否为回文。
- 实现一个支持可变数量数字求和的函数。
- 写一个函数将摄氏温度转换为华氏温度。
- 用函数实现“猜数字”游戏。
- 写一个递归函数打印斐波那契数列前 n 项。