精通 Python 函数:定义、调用、缩进、参数与返回值
精通 Python 函数:定义、调用、缩进、参数与返回值
函数是任何 Python 应用程序的基础构建块。它们封装可复用的逻辑,保持代码简洁(DRY 原则),并使程序更易读、测试和维护。本指南将逐步讲解在 Python 3 中编写、调用和排查函数所需的一切知识,同时也会涉及 Python 2 中的差异。
什么是 Python 函数?
Python 函数是一个独立的代码块,当你调用它时会执行。你可以把它看作一个执行单一、明确任务的微型程序,可在任何需要的地方复用。Python 内置了许多函数(如 print()、input()),你也可以自由创建自己的函数,赋予代码进化和扩展的能力。
定义和调用函数
函数使用 def 关键字声明,后跟函数名和括号包裹的参数列表。函数体以冒号开始,必须缩进。
def greet():
print("Hello, Python!")
# 调用函数
greet()
输出:Hello, Python!
为什么缩进很重要
Python 不使用大括号或显式的 begin/end 语句,而是用缩进来定义作用域。每个代码块——函数、循环、条件判断——必须保持一致的缩进级别。
- 函数定义后至少需要一级缩进(通常为四个空格)。
- 函数内的所有语句必须使用相同的缩进。
- 混合制表符和空格,或缩进深度不一致,会触发
IndentationError。
正确的缩进示例:
def demo():
print("Line 1")
print("Line 2")
常见错误:
def demo():
print("Oops")
会引发:IndentationError: expected an indented block
使用 return 语句
return 关键字将值返回给调用者。如果函数执行到末尾未遇到 return,则隐式返回 None。
def square(x):
return x * x
print(square(4)) # 16
没有 return 时:
def square(x):
x * x
print(square(4)) # None
此外,直接打印函数对象(如 print(square))会显示其内存地址,在应用代码中很少有用。
向函数传递参数
参数为函数提供运行所需的数据。形参是函数签名中定义的占位符。
def multiply(x, y=1):
return x * y
print(multiply(4)) # 4 (y 默认为 1)
print(multiply(4, 2)) # 8
print(multiply(y=3, x=2)) # 6 (关键字参数允许重新排序)
可变长度参数 (*args 和 **kwargs)
有时需要接受任意数量参数的函数。使用 *args 处理位置参数,**kwargs 处理关键字参数。
def summarize(*values, **options):
total = sum(values)
print(f"Total: {total}")
if options.get("show_details"):
print("Values:", values)
summarize(1, 2, 3, 4, 5, show_details=True)
Python 2 与 Python 3:关键差异
- 打印语法:Python 2 用
print "text",Python 3 用print("text")。 - 函数重载(同名多签名)Python 2 不支持,Python 3 可通过
functools.singledispatch或检查参数类型实现。 - 整数除法:Python 2 中
5/2结果为2,Python 3 为2.5(两版本均可用//做地板除)。
函数设计最佳实践
- 保持函数专注:一个函数只做一件明确的事。
- 在函数内部第一行用文档字符串说明用途。
def add(a, b): """Return the sum of a and b.""" return a + b - 使用类型提示(Python 3.5+)明确参数和返回类型。
def add(a: int, b: int) -> int: return a + b - 可选参数优先使用关键字参数,提升可读性。
完整示例
# 综合 Python 3 脚本示例
def greet():
"""Print a friendly greeting."""
print("Hello, Python!")
def square(x: int) -> int:
"""Return the square of x."""
return x * x
def multiply(x: int, y: int = 1) -> int:
"""Return the product of x and y, with y defaulting to 1."""
return x * y
# 演示
if __name__ == "__main__":
greet()
print(square(4)) # 16
print(multiply(4)) # 4
print(multiply(4, 2)) # 8
print(multiply(y=2, x=4)) # 8
更详细指南请参考 Python 官方文档中的 函数定义。
Python