You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python声明函数的不同方式 除def和lambda外还有其他方法吗

Python函数定义的常见方式

你已提到的两种基础方式

  • 标准def关键字声明,是最常用的函数定义方式:
# example 1
def f(x): return x
  • lambda匿名函数赋值,适合定义简单的单行逻辑函数:
# example 2
f = lambda x: x

其他可实现函数/可调用对象构造的方法

  • 用types.FunctionType动态构造函数
    可以直接通过Python内置的函数类型,从代码对象、全局命名空间等参数动态生成函数,适合需要运行时生成函数逻辑的场景:
import types
# 先编译得到代码对象
code_obj = compile('def f(x): return x', '<dynamic_code>', 'exec')
# 从代码对象构造函数
f = types.FunctionType(code_obj.co_consts[0], globals(), 'f')
  • 重载类的__call__方法生成可调用实例
    给自定义类实现__call__魔术方法后,类的实例就可以像普通函数一样被调用,这种方式适合需要在"函数"中持久保存内部状态的场景:
class FuncSimulator:
    def __call__(self, x):
        return x

f = FuncSimulator()
  • 闭包返回内层函数
    在外层函数内部定义内层函数,再把内层函数作为返回值返回,内层函数可以保留外层函数的上下文变量,是实现状态持有、装饰器等功能的常用方式:
def outer_func():
    def inner_func(x):
        return x
    return inner_func

f = outer_func()
  • 用functools.partial生成偏函数
    基于已有函数固定部分入参,生成新的可调用对象,适合需要复用已有函数逻辑、简化入参的场景:
from functools import partial

def base_calc(x, y):
    return x + y

# 固定y参数为0,得到只需要传入x的新函数
f = partial(base_calc, y=0)
  • 特殊类型函数定义
    Python还有两类特殊的函数声明语法,分别对应生成器和协程场景:
# 生成器函数:调用后返回生成器迭代器,支持惰性返回值
def f(x):
    yield x

# 异步协程函数:需要在异步运行时中调用,支持IO并发逻辑
async def f(x):
    return x

内容的提问来源于stack exchange,提问作者mezein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:15:03