Python 中处理函数的两种基本方式:引用函数对象调用函数


s = my_abs
print("function object:", s)
s = my_abs(-10)
print("call function:", s)

两行代码的区别

这两行代码的区别在于:

  1. 第一行:引用函数对象
  2. 第二行:调用函数并执行

1. 引用函数对象(s = my_abs

  • 操作: 这一行代码是将函数 my_abs 本身(即这个函数的内存地址、它的定义、它的代码逻辑)赋值给了变量 s
  • 结果: 变量 s 现在不是一个数值,而是一个函数对象(Function Object)。s 成为了 my_abs 的另一个别名。
  • 输出: 打印 s 时,通常会输出一个描述该函数对象的字符串,例如 <function my_abs at 0x...> ,这表明 s 是一个位于特定内存地址的函数。
  • 术语解释:
    • 函数对象 (Function Object):在 Python 中,函数被视为一等公民(First-Class Citizen),这意味着它们可以像普通变量一样被赋值、作为参数传递、作为返回值返回。当你只写函数名而不加括号时,你得到的就是这个函数本身,即一个函数对象。

2. 调用函数并执行(s = my_abs(-10)

  • 操作: 这一行代码是调用(Call)了函数 my_abs,并将 -10 作为参数(Argument)传递给它。函数会执行其内部的逻辑(例如计算绝对值)。
  • 结果: 变量 s 存储的是函数 my_abs(-10) 执行后返回的结果(Return Value)。如果 my_abs 是计算绝对值的函数,那么 s 的值就是 101010
  • 输出: 打印 s 时,会输出函数返回的数值 101010
  • 关键: 这里的关键是函数名后面的 括号 ()。它告诉 Python 解释器:“请执行这个函数!”

📝 总结对比

特征 s = my_abs (第一行) s = my_abs(-10) (第二行)
操作 引用 函数对象 调用执行 函数
s 的类型 函数(Function) 函数的返回值类型(例如:整数 int
s 的值 函数在内存中的地址/引用 函数执行后的结果(例如:10)
用途 可以用 s 再次调用函数,例如 s(5) s 就是一个普通的数值,不能再像函数一样调用

💡 举例

假设 my_abs 函数定义如下:

def my_abs(x):
    if x < 0:
        return -x
    return x
代码行 结果及含义
s = my_abs s 现在是 my_abs 函数本身。你可以执行 s(-5),它会返回 5。
s = my_abs(-10) my_abs(-10) 执行,返回 10。s 现在是数值 101010。你如果尝试执行 s(5),程序会报错,因为 101010 不是函数。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐