Python 基本语法:函数定义与使用详解
Python 函数是封装可复用代码块的机制,通过 def 关键字定义。本文详解函数参数传递(位置、关键字、默认值、可变参数)、返回值处理、变量作用域(局部与全局)、匿名函数 lambda 及文档字符串 docstring。涵盖常见陷阱如可变默认参数问题,并介绍装饰器与生成器基础概念,帮助开发者构建模块化、易维护的代码结构。

Python 函数是封装可复用代码块的机制,通过 def 关键字定义。本文详解函数参数传递(位置、关键字、默认值、可变参数)、返回值处理、变量作用域(局部与全局)、匿名函数 lambda 及文档字符串 docstring。涵盖常见陷阱如可变默认参数问题,并介绍装饰器与生成器基础概念,帮助开发者构建模块化、易维护的代码结构。

在 Python 中,函数(Function)是一段可重复使用的代码块。它接受输入参数、执行特定操作,并返回一个输出结果。函数的核心目的是提高代码的复用性、可读性和可维护性。通过封装逻辑,开发者可以将复杂的任务分解为多个小的功能单元。
函数可以在程序的任何地方定义,包括在其他函数内部(嵌套函数)。当函数被调用时,程序的控制流会转移到函数内部,执行其中的代码,执行完毕后返回到调用位置。
Python 中的函数定义以关键字 def 开头,后面紧跟函数名称和包含在圆括号中的参数列表。def 关键字与函数名之间通常是一个空格。冒号(:)用于表示函数头的结束,告诉解释器接下来的代码是函数体。
def function_name(parameter1, parameter2):
# 函数体
result = parameter1 + parameter2
return result
缩进规则:
命名规范:
calculate_sum。函数可以接受任意数量的参数,参数的类型可以是任何数据类型。Python 支持多种参数传递方式:
按顺序传递参数,是最基本的形式。
def greet(name, age):
print(f"{name} is {age} years old")
greet("Alice", 25) # Alice is 25 years old
调用时指定参数名,顺序不再重要。
def greet(name, age):
print(f"{name} is {age} years old")
greet(age=25, name="Bob") # Bob is 25 years old
为参数提供默认值,调用时可省略。
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}")
greet("Charlie") # Hello, Charlie
greet("David", "Hi") # Hi, David
注意: 默认参数应为不可变对象(如数字、字符串、元组)。避免使用可变对象(如列表、字典)作为默认值,否则会导致意外行为。
# 错误示例:可变默认参数陷阱
def add_item(item, list=[]):
list.append(item)
return list
print(add_item(1)) # [1]
print(add_item(2)) # [1, 2] (意料之外的累积)
# 正确做法
add_item_safe(item, list=None):
if list is None:
list = []
list.append(item)
return list
允许函数接收不定数量的参数。
*args:接收任意数量的位置参数,打包为元组。**kwargs:接收任意数量的关键字参数,打包为字典。def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 6
def info(**kwargs):
for k, v in kwargs.items():
print(f"{k}: {v}")
info(name="Eve", role="Admin")
函数可以使用 return 语句返回一个值。如果没有显式返回,函数默认返回 None。
def square(x):
return x * x
result = square(5)
print(result) # 25
Python 函数支持返回多个值,实际上是返回一个元组。
def get_min_max(numbers):
return min(numbers), max(numbers)
min_val, max_val = get_min_max([10, 20, 30])
print(min_val, max_val) # 10 30
Python 中的变量作用域分为局部作用域(Local)、全局作用域(Global)和嵌套作用域(Enclosing)。
若需要在函数内修改全局变量,需使用 global 关键字声明。
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1
Lambda 函数是一种匿名函数,通常用于需要简单函数的场合,如传递给高阶函数(map, filter, sorted)。
square = lambda x: x * x
print(square(5)) # 25
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared) # [1, 4, 9, 16]
良好的函数应包含文档字符串,说明函数的用途、参数和返回值。使用三引号 """ 包裹。
def calculate_area(radius):
"""
计算圆的面积
参数:
radius (float): 圆的半径
返回:
float: 圆的面积
"""
import math
return math.pi * radius ** 2
可通过 help() 函数查看文档。
内部函数引用了外部函数的变量,形成闭包。
def outer(x):
def inner(y):
return x + y
return inner
add_five = outer(5)
print(add_five(10)) # 15
使用 yield 关键字的函数,每次调用返回一个值,适合处理大数据流。
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
for num in count_up_to(5):
print(num)
在不修改原函数代码的情况下增强其功能。
def my_decorator(func):
def wrapper():
print("Before execution")
func()
print("After execution")
return wrapper
@my_decorator
def say_hello():
print("Hello")
say_hello()
def divide(a: float, b: float) -> float:
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
函数是 Python 编程的核心构建块。掌握函数的定义、参数传递、返回值、作用域及高级特性,能够显著提升代码质量。建议在实际开发中多练习编写模块化函数,养成良好的编码习惯。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online