一文快速全面了解Python函数
·
函数是Python编程中最重要的构建块之一,它允许你将代码组织成可重用的模块。本文将全面介绍Python函数的定义、调用和各种高级用法。
一、函数基础
1.1 函数定义
Python使用def关键字定义函数,基本语法如下:
def 函数名(参数1, 参数2, ...):
"""函数文档字符串(可选)"""
函数体
return 返回值 # 可选
示例:
def greet(name):
"""向指定的人问好"""
print(f"Hello, {name}!")
1.2 函数调用
定义函数后,可以通过函数名加括号的方式调用:
greet("Alice") # 输出: Hello, Alice!
二、函数参数详解
2.1 位置参数
最常见的参数类型,按位置顺序传递:
def power(base, exponent):
return base ** exponent
print(power(2, 3)) # 8 (2的3次方)
2.2 关键字参数
调用时明确指定参数名,可以不按顺序:
print(power(exponent=3, base=2)) # 8
2.3 默认参数
定义函数时为参数指定默认值:
def power(base, exponent=2): # 默认平方
return base ** exponent
print(power(3)) # 9 (使用默认指数2)
print(power(3, 3)) # 27
注意:默认参数必须放在非默认参数后面
2.4 可变参数
*args - 接收任意数量的位置参数
def sum_numbers(*args):
return sum(args)
print(sum_numbers(1, 2, 3)) # 6
**kwargs - 接收任意数量的关键字参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25, city="New York")
三、返回值
3.1 返回单个值
def square(x):
return x * x
result = square(4) # 16
3.2 返回多个值(实际上是返回元组)
def divide_and_remainder(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder
q, r = divide_and_remainder(10, 3) # q=3, r=1
3.3 无返回值函数
不写return或只写return的函数返回None:
def no_return():
print("This function returns None")
x = no_return() # x为None
四、函数高级特性
4.1 函数作为对象
Python中函数是一等对象,可以赋值给变量:
def shout(text):
return text.upper()
yell = shout # 函数赋值给变量
print(yell("hello")) # HELLO
4.2 函数作为参数
def greet(func):
greeting = func("Hi, I'm a function passed as an argument")
print(greeting)
greet(shout) # 输出: HI, I'M A FUNCTION PASSED AS AN ARGUMENT
4.3 嵌套函数
函数内部可以定义其他函数:
def outer():
print("Outer function")
def inner():
print("Inner function")
inner()
outer()
4.4 闭包
内部函数可以记住外部函数的作用域:
def make_multiplier(factor):
def multiplier(x):
return x * factor
return multiplier
times3 = make_multiplier(3)
print(times3(5)) # 15
五、作用域规则
5.1 LEGB规则
Python查找变量的顺序:
- Local - 局部作用域
- Enclosing - 嵌套函数作用域
- Global - 模块全局作用域
- Built-in - 内置作用域
5.2 global和nonlocal
修改全局变量和嵌套作用域变量:
count = 0 # 全局变量
def increment():
global count
count += 1
def outer():
x = "outer"
def inner():
nonlocal x
x = "inner"
inner()
print(x) # 输出: inner
六、装饰器
装饰器是修改其他函数行为的函数:
6.1 基本装饰器
def my_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
6.2 带参数的装饰器
def repeat(num_times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("Alice")
七、Lambda函数
匿名函数,用于简单操作:
square = lambda x: x * x
print(square(5)) # 25
# 常用于排序等场景
points = [(1, 2), (3, 1), (5, 0)]
points.sort(key=lambda point: point[1]) # 按y坐标排序
八、最佳实践
- 函数应短小精悍:一个函数只做一件事
- 使用有意义的名称:函数名应明确表达其功能
- 限制参数数量:通常不超过3-4个
- 添加文档字符串:使用三引号说明函数用途
- 避免修改传入的可变参数:除非明确需要
- 返回一致的类型:避免有时返回None有时返回值
九、实际应用示例
9.1 文件处理函数
def process_file(filename, operation='read'):
try:
with open(filename, 'r' if operation == 'read' else 'w') as f:
if operation == 'read':
return f.read()
elif operation == 'write':
f.write("Some content")
return True
except IOError as e:
print(f"File error: {e}")
return None
9.2 数据验证装饰器
def validate_input(func):
def wrapper(number):
if not isinstance(number, (int, float)):
raise ValueError("Input must be a number")
if number < 0:
raise ValueError("Input must be positive")
return func(number)
return wrapper
@validate_input
def calculate_square_root(x):
return x ** 0.5
总结
Python函数是代码组织和重用的基本单元,掌握函数的使用对于编写清晰、模块化的代码至关重要。从简单的参数传递到高级的装饰器用法,Python函数提供了强大的抽象能力。通过遵循最佳实践并理解函数的工作原理,你可以编写出更高效、更易维护的Python代码。
更多推荐


所有评论(0)