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)函数可以作为返回值从另一个函数中返回函数内部定义的函数(嵌套函数)可以不加括号直接返回,这样就生成了一个新的函数对象。这种写法是构建闭包的关键步骤。
返回时不要加括号,否则返回的是调用结果(通常是 None 或具体值)
返回的函数能访问外层函数的局部变量,形成“闭包”环境
典型例子:
def make_adder(n): return lambda x: x + n,调用add5 = make_adder(5)后,add5(3)返回 8函数对象支持属性和操作因为函数是对象,所以具备身份(id)、类型(type)、可哈希性(可作字典键)、甚至可动态绑定属性(需借助__dict__)。
Python 3.14.3微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载立即学习“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)能快速确认变量是否为函数
