Python 中的函数(Function)是可重复使用的代码块,用于封装特定功能并提高代码复用性。以下是函数的核心知识点:
def greet(name):
"""打印问候语""" # 文档字符串(Docstring)
print(f"Hello, {name}!")
greet("Alice") # → Hello, Alice!
def add(a, b):
return a + b
add(3, 5) # → 8
def power(x, exponent=2):
return x ** exponent
power(3) # → 9(使用默认指数)
power(2, 3) # → 8(覆盖默认值)
greet(name="Bob") # 明确指定参数名
# *args(位置参数元组)
def sum_all(*args):
return sum(args)
sum_all(1, 2, 3) # → 6
# **kwargs(关键字参数字典)
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30)
def square(x):
return x * x
def get_stats():
return 42, "success", [1, 2, 3] # 实际返回元组
result = get_stats() # → (42, "success", [1,2,3])
x = 10 # 全局变量
def outer():
x = 5 # 封闭作用域变量
def inner():
x = 1 # 局部变量
print(x)
inner()
outer() # → 1
print(x) # → 10
def multiplier(n):
def multiply(x):
return x * n
return multiply
double = multiplier(2)
print(double(5)) # → 10
def log_time(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"耗时: {time.time()-start:.2f}秒")
return result
return wrapper
@log_time
def slow_function():
time.sleep(2)
slow_function() # 输出耗时并返回None
def repeat(num=1):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num=3)
def greet():
print("Hello!")
greet() # 打印3次"Hello!"
square = lambda x: x ** 2
square(5) # → 25
nums = [1, 3, 2, 5, 4]
sorted(nums, key=lambda x: -x) # → [5,4,3,2,1](逆序排序)
def countdown(n):
while n > 0:
yield n
n -= 1
for num in countdown(3):
print(num) # 依次打印3,2,1
squares = (x**2 for x in range(5)) # 生成器对象
def factorial(n):
if n == 0:
return 1
return n * factorial(n-1)
# 需手动模拟尾递归
def tail_factorial(n, acc=1):
if n == 0:
return acc
return tail_factorial(n-1, acc*n)
def add(a: int, b: int) -> int:
return a + b
from functools import partial
int_base2 = partial(int, base=2)
int_base2("1010") # → 10
async def fetch_data():
data = await async_request() # 异步请求
return data
可变默认参数:
def bad_append(new_item, my_list=[]): # 危险!默认参数共享
my_list.append(new_item)
return my_list
作用域污染:
count = 0
for count in range(5): # 循环变量覆盖全局变量
pass
print(count) # → 4(而非预期的0)
递归深度限制:
# 默认递归深度约1000层
def deep_recursion(n):
if n == 0:
return
deep_recursion(n-1)
deep_recursion(2000) # → RecursionError
通过掌握这些内容,可以构建模块化、可维护的代码结构。实际应用中需根据需求选择合适的函数类型,并注意作用域管理和性能优化。