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__ 变量,借助该变量也可以查看模块(包)内包含的所有成员。
仍以 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() 函数。
- FFmpeg菜鸡互啄#第2篇#配置VS开发环境
- FFmpeg菜鸡互啄#第3篇#视频解码
- FFmpeg菜鸡互啄#第4篇#音频解码
- FFmpeg菜鸡互啄#第5篇#视频帧格式转换
- tomcat请求处理分析(三) 绑定本地端口监听请求
- 利用FFmpeg对火眼一体摄像机的回调数据进行处理:YUV转H264,H264封装flv,所有输入都是在内存中。
- MySQL 传统复制中常见故障处理和结构优化案例分析
- sql带条件查找最小缺失编号
- activiti学习笔记(六) 监听器
- activiti学习笔记(五) 流程部署
- 打开文件open()函数的使用方法详解
- activiti学习笔记(四) 配置器
- WaitForMultipleObjects用法详解,一看就懂
- activiti学习笔记(三) 监听生命周期
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 烂了大街的 Spring 循环依赖问题,你觉得自己会了吗
- 软件测试丨自动化测试之读取配置文件
- 一文搞懂高频面试题之限流算法,从算法原理到实现,再到对比分析
- TRTC Android端开发接入学习之实现语音通话(六)
- Shell脚本加密经验分享
- python提示每天债券打新
- Python3下基于Scapy库完成网卡抓包解析
- pandas:解决groupby().apply()方法打印两次
- pandas:字段值插入数据表第一行的解决办法
- Recommending items to more than a billion people(面向十亿级用户的推荐系统)
- pandas:对字符串类型做差分比较
- pandas:由列层次化索引延伸的一些思考
- 远程过程调用 Java RMI 技术 远程控制
- Real-time Xenomai 3 example 1
- Electron 常见问题收录II