探索 Python 函数的结构
让我们一起来解剖一个自定义的 Python 函数,深入了解它的各个组成部分。通过这个例子,你会对函数的定义、参数传递和返回值有更清晰的认识。
def adder(f, s, t=None):
"""
计算并返回 f, s 和 t 的总和。
如果参数 t 未提供,则返回 f 和 s 的总和。
"""
result = f + s # 将 f + s 的结果存储在新变量中,避免修改参数 s
if t is not None: # 检查是否提供了 t 参数 (更加严谨的方法)
result += t
return result
一些重要的提示:
避免修改传入的参数: 在函数内部直接修改传入的参数 (特别是可变类型,如列表或字典) 可能会导致意想不到的副作用。最好创建一个新的变量来存储计算结果,例如上面的
result
变量。参数检查: 使用
if t is not None:
而不是if t:
可以更准确地判断参数t
是否被传入。if t:
在t
的值为0
、False
、空字符串""
或空列表[]
等情况下也会被判定为False
。
函数头:函数的声明 (Function Header)
def adder(f, s, t=None):
函数头是函数的声明部分,它定义了函数的名字和参数。
def
关键字: 每个函数定义都以def
关键字开始,告诉 Python 解释器这是一个函数定义。函数名称:
def
关键字后面跟着函数的名字,例如这里的adder
。 函数名要遵循 Python 的命名规则,通常使用小写字母,多个单词之间用下划线分隔(例如:calculate_sum
)。圆括号
()
: 函数名后面是一对圆括号,用于包含函数的参数。参数列表: 圆括号内是函数的参数列表,参数之间用逗号分隔。
f
,s
,t=None
是adder
函数的三个参数。- 位置参数:
f
和s
是位置参数,调用函数时必须按照顺序传入对应的值。 - 默认参数:
t=None
是一个默认参数。 这意味着如果在调用adder
函数时没有提供t
的值,t
将默认为None
。 默认参数必须位于参数列表的最后面。
- 位置参数:
冒号
:
: 函数头的最后以冒号结尾,表示函数体的开始。
函数体:函数的逻辑 (Function Body)
函数体包含了实现函数功能的代码块。 函数体中的所有语句都必须相对于函数头有相同的缩进量 (通常是 4 个空格)。
文档字符串 (Docstring): 一个好的习惯是在函数体的开头添加一个文档字符串,用来说明函数的作用、参数和返回值。 文档字符串用三引号
"""
包裹起来,可以是单行或多行。 例如:python""" 计算并返回 f, s 和 t 的总和。 如果参数 t 未提供,则返回 f 和 s 的总和。 """
可以使用
help(adder)
来查看函数的文档字符串。语句: 文档字符串后面是实现函数功能的语句。这些语句可以是任何有效的 Python 代码,例如赋值、条件判断、循环等。 在
adder
函数中,语句是:pythonresult = f + s if t is not None: result += t
return
语句:return
语句用于指定函数的返回值。 当函数执行到return
语句时,会立即停止执行,并将return
后面的值返回给调用者。adder
函数使用以下语句返回计算结果:pythonreturn result
没有
return
语句: 如果函数中没有return
语句,或者return
语句后面没有值,那么函数将默认返回None
。返回多个值:
return
语句可以返回多个值,多个值之间用逗号分隔。 例如:return a, b, c
。 实际上,这会返回一个元组 (tuple)。
Void 函数 (实际上返回 None 的函数):
没有 return
语句或 return
语句没有返回值的函数被称为 "void" 函数,更准确的说法是:它们返回 None
。 这些函数通常用于执行一些操作 (例如打印信息到屏幕),而不是返回一个特定的值。 例如,一个只负责打印欢迎信息的函数可能就是一个 void 函数。