正确:Python中函数是对象,可直接赋值、传递和存储;func = my_function 表示引用函数本身,而func = my_function() 赋值的是返回值;函数可作为参数传给其他函数,如map(str, [1, 2, 3]) 中str被引用;自定义函数可接收函数参数,如apply_func(abs, -5);函数可存入容器如funcs = [len, str.upper, int],也可由闭包返回如make_adder(n)生成lambda函数;可用callable()判断是否可调用,或用isinstance(func, types.FunctionType)精确判断是否为函数类型;Python无需取地址或指针声明,函数名即对象引用。

Python3 中函数本身就是对象,可以直接赋值、传递和存储,不需要特殊语法来“引用”函数。
把函数名当变量用
函数定义后,函数名就是指向该函数对象的变量。直接使用函数名(不加括号)即可获取函数对象本身。
- ✅ 正确:`func = my_function` —— 把函数对象赋给变量 func
- ❌ 错误:`func = my_function()` —— 这是调用函数,赋的是返回值,不是函数本身
作为参数传给其他函数
这是最常见的函数引用场景,比如回调、装饰器或高阶函数中。
- 例如:
map(str, [1, 2, 3])中,str就是被引用的函数 - 自定义函数接收函数参数:
def apply_func(f, x): return f(x),调用时写apply_func(abs, -5)
存入容器或返回函数
函数对象可以像字符串、数字一样放进列表、字典,甚至由另一个函数返回。
立即学习“Python免费学习笔记(深入)”;
- 列表存函数:
funcs = [len, str.upper, int],之后可funcs[0]("hello") → 5 - 闭包返回函数:
def make_adder(n): return lambda x: x + n,add3 = make_adder(3)得到的就是一个可调用的函数引用
检查和验证函数引用
可以用 callable() 或 isinstance(..., types.FunctionType) 判断某变量是否为函数。
-
callable(my_func)返回True表示它可被调用(包括函数、类、有__call__的实例) - 更精确判断是否为普通函数:
import types; isinstance(my_func, types.FunctionType)
基本上就这些 —— Python 里没有“取地址”或“指针声明”的概念,函数引用就是自然地把函数名当作对象来用。











