1. Python 中的 def 到底是什么意思
1.1 def 的核心含义
在 Python 语言中,def 是用于声明函数的关键字,意思是“定义一个可重复调用的代码块”。通过 def,你可以给这个代码块起一个名字、指定参数,以及实现具体的逻辑,从而在需要时多次使用。理解 def 的作用,是掌握函数式编程的第一步。
另外要明确的是,缩进在 Python 中非常重要,它用来表示 函数体的边界,而不是像某些语言用花括号那样直接包裹起来。只要缩进一致,Python 就能正确识别哪些代码属于函数体。
def greet(name):
return f"你好,{name}!"
1.2 函数与作用域
定义一个函数并不意味着它就只是一个独立的块,它还会影响变量的作用域。局部变量是在函数内部声明并只在该函数内部可见的变量;全局变量则在整个模块中可见。理解作用域有助于避免变量冲突和意外的值覆盖。
以下示例演示了局部变量对全局变量的影响:局部变量与全局变量的命名冲突时,函数内部的变量不会改变全局同名变量,除非你显式使用 global 或通过返回值来更新全局变量。
x = 10
def f():
x = 5 # 局部变量
return x
print(f()) # 5
print(x) # 10
2. 用 def 定义函数的基本语法
2.1 基本结构
用 def 定义函数时,通常的结构是:def 函数名(参数列表): 函数体,函数体中的代码需要进行缩进来表示属于该函数。
函数名应具备描述性,便于他人阅读代码。参数列表可以为空,也可以包含一个或多个参数。冒号标志着函数体的开始,缩进决定哪些行位于函数体内。
def add(a, b):
return a + b
2.2 带默认参数和可变参数
默认参数让函数在调用时可以省略某些参数,未传入时会使用预设的默认值。默认参数帮助你编写更灵活的接口,降低调用难度。
可变参数允许函数接收任意数量的参数,这在初学者学习时非常实用。常见写法包括 *args 与 **kwargs,分别用于接收位置参数和关键词参数。
def greet(name, greeting="你好"):
return f"{greeting}, {name}!"
print(greet("小明")) # 你好, 小明
print(greet("小李", "Hello")) # Hello, 小李
def sum_all(*nums):
total = 0
for n in nums:
total += n
return total
print(sum_all(1, 2, 3, 4))
3. 零基础也能学会:从0到1的学习路径
3.1 学习步骤
如果你是零基础,建议从最简单的函数开始实践:定义一个返回固定字符串的函数,再逐步增加参数和返回值的复杂度。通过不断练习,可以建立对 def 与函数调用的直觉。
一个有效的学习策略是用最小可行的例子来测试:先写一个小函数,再在主程序中调用它,观察输出是否符合预期。逐步扩展到包含条件分支、循环和返回值的复杂函数。
3.2 常见错误与排查
刚开始时你可能会遇到一些常见问题,比如 IndentationError、参数不匹配或返回值意外为空。遇到问题时,先检查缩进是否一致、函数是否有正确的返回语句,以及调用时传入的参数是否符合预期。
def f()
return 1
4. 实战示例:用 def 构建一个小工具
4.1 计算列表元素和
这是一个很好的练手例子:把一个数字列表传给函数,返回所有元素的和。通过这个练习,可以巩固 参数传递、循环 与 返回值 的概念。
你将学习如何把实现封装为一个可重复使用的工具,提高代码的可读性和复用性。
def sum_list(nums):
total = 0
for n in nums:
total += n
return total
4.2 将温度单位互转
再进一步,可以实现一个单位转换工具,展示如何把输入参数转化为另一种形式,并返回结果。这样的函数对后续的组合使用非常有帮助。
def c_to_f(c):
return c * 9/5 + 32
print(c_to_f(0)) # 32.0