python中函数是一等对象,可赋值、传递、存储和返回;能作参数传入(如map、sorted)或作为返回值(如闭包),支持属性操作,需区分函数对象(不带括号)与调用结果(带括号)。

Python中函数是一等对象(first-class object),意味着函数可以像变量一样被赋值、传递、存储和返回。理解这一点,是掌握高阶函数、闭包、装饰器等高级特性的基础。
函数可以作为参数传入其他函数
只要接收方函数设计为接受可调用对象(callable),就能把函数名(不带括号)作为实参传入。此时传入的是函数对象本身,不是调用结果。
- 内置函数如 map()、filter()、sorted() 都接受函数作为参数
- 自定义函数也可以定义形参接收函数,例如:def apply_func(func, x): return func(x)
- 传入 lambda 表达式也完全合法,比如 sorted([3,1,4], key=lambda x: -x)
函数可以作为返回值从另一个函数中返回
函数内部定义的函数(嵌套函数)可以不加括号直接返回,这样就生成了一个新的函数对象。这种写法是构建闭包的关键步骤。
这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)
- 返回时不要加括号,否则返回的是调用结果(通常是 None 或具体值)
- 返回的函数能访问外层函数的局部变量,形成“闭包”环境
- 典型例子:def make_adder(n): return lambda x: x + n,调用 add5 = make_adder(5) 后,add5(3) 返回 8
函数对象支持属性和操作
因为函数是对象,所以具备身份(id)、类型(type)、可哈希性(可作字典键)、甚至可动态绑定属性(需借助 __dict__)。
立即学习“Python免费学习笔记(深入)”;
- id(my_func) 和 my_func.__name__ 可获取唯一标识和名称
- 函数可存入列表、元组、字典,例如:handlers = {'start': start_func, 'stop': stop_func}
- 可通过 setattr(my_func, 'version', '1.2') 添加自定义属性(部分场景用于标记或配置)
注意区分“函数对象”和“函数调用”
这是初学者最容易混淆的地方:带括号是执行并返回结果;不带括号才是传递或返回函数本身。
- 错误写法:result = my_func() 传给另一个函数 → 实际上传入的是 my_func() 的返回值
- 正确写法:do_something(my_func) → 传入函数对象,由 do_something 内部决定何时调用
- 调试小技巧:打印 type(f) 和 callable(f) 能快速确认变量是否为函数









