Skip to content

探索 Python 函数的结构

让我们一起来解剖一个自定义的 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 的值为 0False、空字符串 "" 或空列表 [] 等情况下也会被判定为 False

函数头:函数的声明 (Function Header)

python
def adder(f, s, t=None):

函数头是函数的声明部分,它定义了函数的名字和参数。

  • def 关键字: 每个函数定义都以 def 关键字开始,告诉 Python 解释器这是一个函数定义。

  • 函数名称: def 关键字后面跟着函数的名字,例如这里的 adder。 函数名要遵循 Python 的命名规则,通常使用小写字母,多个单词之间用下划线分隔(例如:calculate_sum)。

  • 圆括号 () 函数名后面是一对圆括号,用于包含函数的参数。

  • 参数列表: 圆括号内是函数的参数列表,参数之间用逗号分隔。 f, s, t=Noneadder 函数的三个参数。

    • 位置参数: fs 是位置参数,调用函数时必须按照顺序传入对应的值。
    • 默认参数: t=None 是一个默认参数。 这意味着如果在调用 adder 函数时没有提供 t 的值,t 将默认为 None。 默认参数必须位于参数列表的最后面。
  • 冒号 : 函数头的最后以冒号结尾,表示函数体的开始。

函数体:函数的逻辑 (Function Body)

函数体包含了实现函数功能的代码块。 函数体中的所有语句都必须相对于函数头有相同的缩进量 (通常是 4 个空格)。

  • 文档字符串 (Docstring): 一个好的习惯是在函数体的开头添加一个文档字符串,用来说明函数的作用、参数和返回值。 文档字符串用三引号 """ 包裹起来,可以是单行或多行。 例如:

    python
        """
        计算并返回 f, s 和 t 的总和。
    
        如果参数 t 未提供,则返回 f 和 s 的总和。
        """

    可以使用 help(adder) 来查看函数的文档字符串。

  • 语句: 文档字符串后面是实现函数功能的语句。这些语句可以是任何有效的 Python 代码,例如赋值、条件判断、循环等。 在 adder 函数中,语句是:

    python
        result = f + s
        if t is not None:
            result += t
  • return 语句: return 语句用于指定函数的返回值。 当函数执行到 return 语句时,会立即停止执行,并将 return 后面的值返回给调用者。 adder 函数使用以下语句返回计算结果:

    python
        return result
    • 没有 return 语句: 如果函数中没有 return 语句,或者 return 语句后面没有值,那么函数将默认返回 None

    • 返回多个值: return 语句可以返回多个值,多个值之间用逗号分隔。 例如: return a, b, c。 实际上,这会返回一个元组 (tuple)。

Void 函数 (实际上返回 None 的函数):

没有 return 语句或 return 语句没有返回值的函数被称为 "void" 函数,更准确的说法是:它们返回 None。 这些函数通常用于执行一些操作 (例如打印信息到屏幕),而不是返回一个特定的值。 例如,一个只负责打印欢迎信息的函数可能就是一个 void 函数。