当前位置: 首页 > news >正文

python怎么查看函数原型及变量是什么类型

python代码中看到一个变量或者对象名,怎么查看这个变量到底是个什么东西,是属性,还是函数,还是模块,还是个包,怎么去查看,要有一个查找流程:

1.可以先用print(变量名)和print(type(变量名)),确认变量是什么类型的参数

2.如果是模块或者类,可以通过dir()函数去查看模块的成员值,如果是个函数,可以通过help(function_name)函数去查看函数的原型和返回值

3.怎么判断模块里查询的一个变量是属性还是函数能,又可以借助第1步的print(type(变量名)),递归往下查询

3.如果dir或者help查找失败,如果是标准库或者内置函数,可以通过查看源码的形式去源文件查找,比如通过__file__内置属性或者inspect模块。如果是第三方库可以去官方网站查找,非自定义的模块或者包,The Python Standard Library — Python 3.13.3 documentation。

Python查看模块(变量、函数、类)方法

正确导入模块或者包之后,怎么知道该模块中具体包含哪些成员(变量、函数或者类)呢?

查看已导入模块(包)中包含的成员,本节给大家介绍 2 种方法。

查看模块成员:dir()函数

事实上,在前面章节的学习中,曾多次使用 dir() 函数。通过 dir() 函数,我们可以查看某指定模块包含的全部成员(包括变量、函数和类)。注意这里所指的全部成员,不仅包含可供我们调用的模块成员,还包含所有名称以双下划线“__”开头和结尾的成员,而这些“特殊”命名的成员,是为了在本模块中使用的,并不希望被其它文件调用。

这里以导入 string 模块为例,string 模块包含操作字符串相关的大量方法,下面通过 dir() 函数查看该模块中包含哪些成员:

import string
print(dir(string))

程序执行结果为:

['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

可以看到,通过 dir() 函数获取到的模块成员,不仅包含供外部文件使用的成员,还包含很多“特殊”(名称以 2 个下划线开头和结束)的成员(魔法函数),列出这些成员,对我们并没有实际意义。

因此,这里给读者推荐一种可以忽略显示 dir() 函数输出的特殊成员的方法。仍以 string 模块为例:

import string
print([e for e in dir(string) if not e.startswith('_')])

程序执行结果为:

['Formatter', 'Template', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

显然通过列表推导式,可在 dir() 函数输出结果的基础上,筛选出对我们有用的成员并显示出来。

查看模块成员:__all__变量

除了使用 dir() 函数之外,如果模块支持__all__变量,还可以使用 __all__ 变量,借助该变量也可以查看模块(包)内包含的所有成员。

仍以 string 模块为例,举个例子:

import string
print(string.__all__)

程序执行结果为:

['ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace', 'Formatter', 'Template']

显然,和 dir() 函数相比,__all__ 变量在查看指定模块成员时,它不会显示模块中的特殊成员,同时还会根据成员的名称进行排序显示。

不过需要注意的是,并非所有的模块都支持使用 __all__ 变量,因此对于获取有些模块的成员,就只能使用 dir() 函数。

python查看模块或函数的帮助信息

可以使用 help() 函数来获取指定成员(甚至是该模块)的帮助信息,help() 函数底层也是借助 __doc__ 属性实现的。

先借助 dir() 函数,查看 my_package 包中有多少可供我们调用的成员:​​​​​​​

import my_package
print([e for e in dir(my_package) if not e.startswith('_')])

程序输出结果为:

['CLanguage', 'display', 'module1', 'module2']

通过此输出结果可以得知,在 my_package 包中,有以上 4 个成员可供我们使用。接下来,我们使用 help() 函数来查看这些成员的具体含义(以 module1 为例):

import my_package
help(my_package.module1)

输出结果为:

Help on module my_package.module1 in my_package:

NAME
    my_package.module1 - #module1.py模块文件

FUNCTIONS
    display(arc)
        直接输出指定的参数

FILE
    c:\users\mengma\desktop\my_package\module1.py

通过输出结果可以得知,module1 实际上是一个模块文件,其包含 display() 函数,该函数的功能是直接输出指定的 arc 参数。同时,还显示出了该模块具体的存储位置。
 

那么,如果使用 help() 函数或者 __doc__ 属性,仍然无法满足我们的需求,还可以使用以下 2 种方法:

  • 对python标准模块,可以调用 __file__ 属性,查看该模块或者包文件的具体存储位置,直接查看其源代码.通过 __file__ 属性查找该模块(或包)文件所在的具体存储位置,注意通过包名.__file__方式查看包的存储路径,实际输出的 __init__.py 文件的存储路径。或者使用inspect模块获取函数源代码位置,然后打开源文件查看。
import inspectdef add(a, b):return a + bresult = add(1, 2)
print(inspect.signature(add))  #获取函数参数列表 (a, b)
print(inspect.signature(add).return_annotation)  #获取函数返回值 <class 'inspect._empty'>#查看标准库中函数代码位置
print(inspect.getsourcefile(print))
  • 对于非自定义的模块或者包的第三方库,可以查阅 python 库的参考文档,获取函数的原型信息等( The Python Standard Library — Python 3.13.3 documentation)。

查看python所有的内置函数和内置属性

dir(__builtins__) 

返回一个包含所有内置函数和常量的列表

查看函数返回值类型

第一种方法是使用type()函数来获取对象的类型,包括函数的返回值。

第二种方法是使用类型提示来声明函数的参数和返回值类型。

第三种方法是使用inspect模块来获取函数的类型信息,包括参数列表和返回值的注释

相关文章:

  • [SystemVerilog] Clocking
  • 2软考系统架构设计师:第一章系统架构概述 - 练习题附答案及超详细解析
  • 基于libdxfrw库读取样条曲线并离散为点
  • DHCP配置文件详解
  • FreeRTOS事件标志组详解:高效的任务间通知机制
  • 区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR,CMAKE_CURRENT_SOURCE_DIR
  • windows下查看idea运行的进程占的JVM情况工具
  • Agent2Agent
  • 校平机:金属板材加工的核心设备
  • x86系列CPU寄存器和汇编指令总结
  • Kettle学习
  • VSCode远程登录云服务器并设置免密登录全攻略
  • LeetCode --- 446 周赛
  • 2.4.5goweb项目上传到csdn的git仓库
  • Eigen的主要类及其功能
  • 《数据库系统工程师》-B站-视频截图整理-2021-23
  • JavaScript原生实现简单虚拟列表(列表不定高)
  • 【数据结构刷题】顺序表与ArrayList
  • 2025.04.26-美团春招笔试题-第一题
  • 使用 LangGraph 和 Elasticsearch 构建强大的 RAG 工作流
  • 王文涛会见德国汽车工业协会主席穆勒
  • 加拿大警方:已确认有9人在温哥华驾车撞人事件中遇难
  • 新加坡选情渐热:播客、短视频各显神通,总理反对身份政治
  • 美国政府将暂时恢复部分受影响留学生的合法身份,并将制订新标准
  • 特朗普将举行集会庆祝重返白宫执政百日,美媒:时机不当
  • 乌方称泽连斯基与特朗普进行简短会谈