Python中function函数_Python内置function函数的详解

3次阅读

Python 中没有名为 function 的内置函数,function 是 types.FunctionType 的字符串表示;判断对象是否为函数应使用 callable()或 isinstance(obj, types.FunctionType)。

Python 中 function 函数_Python 内置 function 函数的详解

Python 里没有叫 function 的内置函数,function 是类型名(type 的一个实例),不是可调用的内置函数。你查不到 help(function),也调用不了 function(……) —— 它根本不是函数。

怎么判断一个对象是不是函数?用 callable()isinstance(……, types.FunctionType)

想确认某东西是不是函数,别猜,用标准方式:

  • callable(obj) 最常用:返回 True 表示能加括号调用(包括函数、类、有 __call__ 的实例)
  • 要严格限定“就是 def 或 lambda 定义的函数”,得导入 types
    import types def f(): pass isinstance(f, types.FunctionType)  # True isinstance(len, types.FunctionType)  # False(len 是 builtin_function_or_method)
  • types.FunctionType 不涵盖内置函数(如 printlen)、@staticmethod@classmethod,它们属于不同类型

type(lambda: None) 返回什么?为什么 不是 function

交互式环境里敲:

type(lambda: None) # 

注意:这里的 function 是类名显示,不是字符串 'function',也不是可导入的顶层名称。它等价于 types.FunctionType,但你不能直接写 function 当类型用:

  • isinstance(f, function)NameError: name 'function' is not defined
  • 必须写 isinstance(f, types.FunctionType)
  • function 这个名字只在 repr__name__ 里出现,不作为内置标识符存在

常见误用:把 function 当成构造器或类型注解

以下写法全错:

  • f = function(lambda x: x)NameError(没有这个构造函数)
  • def g(x: function) -> function: → 类型检查器报错(应写 Callabletypes.FunctionType
  • from builtins import function → 找不到该名字

正确替代方案:

立即学习Python 免费学习笔记(深入)”;

  • 构造可调用对象:用 lambdadef、或 types.FunctionType(code, globals, name)(极少见,需 字节 码知识)
  • 类型提示:用 from typing import Callable,例如 Callable[[int], str]

真正需要区分函数类型时,types 模块里的具体类型(FunctionTypeBuiltinFunctionTypeMethodType)比凭名字猜测可靠得多;而日常判断“能不能调用”,callable() 就够了——别被 的显示误导去搜不存在的内置函数。

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-07发表,共计1332字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。