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

Python 常用内置函数详解(七):dir()函数——获取当前本地作用域中的名称列表或对象的有效属性列表

目录

  • 一、功能
  • 二、语法和示例

一、功能

dir() 函数获取当前本地作用域中的名称列表或对象的有效属性列表。

二、语法和示例

dir() 函数有两种形式,如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。如果对象有一个名为 __dir__() 的方法,那么该方法将被调用,并且必须返回一个属性列表。dir()函数的语法格式如下:

C:\Users\amoxiang>ipython
Python 3.12.8 (tags/v3.12.8:2dc476b, Dec  3 2024, 19:30:04) [MSC v.1942 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.32.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: dir?
Docstring:
Show attributes of an object.If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:for a module object: the module's attributes.for a class object:  its attributes, and recursively the attributesof its bases.for any other object: its attributes, its class's attributes, andrecursively the attributes of its class's base classes.
Type:      builtin_function_or_methoddir([object])
参数说明: 
1.object: 对象。该参数为可选参数
2.返回值: 如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,则会返回所有属性和方法,甚至是所有对象默认的内置属性

【示例1】对比导入模块前后的dir()函数返回列表。使用dir()函数输出当前本地作用域中的名称列表,然后导入random和math模块,最后使用dir()函数输出名称列表。代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:28
# @Author  : AmoXiang
# @File    : dir_demo.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680# ['__annotations__', '__builtins__', '__cached__', '__doc__',
# '__file__', '__loader__', '__name__', '__package__', '__spec__']
print(dir())    # 输出当前本地作用域中的名称列表import random   # 导入random模块
import math     # 导入math 模块
# ['__annotations__', '__builtins__', '__cached__', '__doc__', 
# '__file__', '__loader__', '__name__', '__package__', '__spec__', 'math', 'random']
# 对比输出结果发现,导入random和math 模块后,dir()函数返回结果列表中多了"math"和"random"2个元素。
print(dir())    # 输出当前本地作用域中的名称列表

【示例2】将模块名作为参数传递给dir()函数,输出该模块的属性列表。代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:28
# @Author  : AmoXiang
# @File    : dir_demo.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680import math
import timeprint(dir(math))  # 输出math模块属性名称列表
print(dir(time))  # 输出time模块属性名称列表# 使用dir(list)会返回列表的所有属性
print([a for a in dir(list) if re.match(r'__\w{,2}__',a)]) # 使用正则表达式,匹配所有包含__**__形式的属性
print([a for a in dir(list) if 're' in a]) # 使用in关键字过滤所有包含"re"字符的属性

【示例3】将不同类型的对象名作为参数传递给dir()函数,输出该模块的属性列表。代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:28
# @Author  : AmoXiang
# @File    : dir_demo.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680names = ['张三','李四','王五']  # 定义一个列表
info = {'name':'张三','age':18} # 定义一个字典
print(dir(names)) # 输出列表的属性
print(dir(info))  # 输出字典的属性

【示例4】将自定义类对象作为参数传递给dir()函数。代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:28
# @Author  : AmoXiang
# @File    : dir_demo.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680class Student(object):def __init__(self, name, age):self.name = nameself.age = agedef __dir__(self):'''定义__dir__函数,返回列表'''print('__dir__~~~')# return None TypeError: 'NoneType' object is not iterable# return ['amo', 'jerry', 'paul']return {1}s1 = Student('amo', 18)  # 实例化Student类
print(dir(s1))  # 将实例名称作为参数,传递给调用dir()函数 ==> [1]
print(type(dir(s1)))  # <class 'list'>
print(dir(Student))

【示例5】执行模块中指定的函数。创建一个module_a.py文件,代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:57
# @Author  : AmoXiang
# @File    : module_a.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680def get_crawl_name():passdef get_crawl_time():passdef crawl_sina():'''爬取新浪'''print('正在爬取新浪数据')def crawl_wechat():'''爬取微信'''print('正在爬取微信数据')def crawl_weibo():'''爬取微博'''print('正在爬取微博数据')def crawl_toutiao():'''爬取头条'''print('正在爬取头条数据')

创建 run.py 文件,使用 import 语句导入 module_a 模块,然后使用 dir() 函数获取模块中的所有属性,如果该属性是以 crawl_ 开头,则调用该函数。代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2025-05-01 7:58
# @Author  : AmoXiang
# @File    : run.py
# @Software: PyCharm
# @Blog: https://blog.csdn.net/xw1680import module_a  # 导入模块list_from_a = dir(module_a)  # 获取模块中所有属性
print(list_from_a)for mod in list_from_a:  # 遍历所有属性if mod.startswith('crawl_'):  # 判断属性名是否以"crawl_"开头f = getattr(module_a, mod)  # 获取对象中以"crawl_"开头的属性值f()  # 调用以"crawl_"开头的方法

相关文章:

  • stm32数码管显示数字/循环
  • 【Redis】Another Redis Desktop Manager 安装指南
  • podman/docker国内可用的docker镜像源(2025-05)
  • Linux btop 使用教程
  • Wireshark抓取SMTP协议报文
  • 如何提升自我执行力?
  • Linux51 安装baidunetdisk yum install rpm -ivh
  • 中科院:通过内部表示优化LLM上下文利用
  • 图解 Git 工作流:理解 Rebase、Merge 与 Pull Request 的区别
  • 21 课时精通生成式 AI:微软官方入门指南详解
  • 【设计模式】GoF设计模式之备忘录模式(Memento Pattern)
  • LTspice
  • 【软件设计师:复习】上午题核心知识点总结(二)
  • 大模型蒸馏技术
  • 【业务领域】电脑主板芯片电路结构
  • (持续更新)Ubuntu搭建LNMP(Linux + Nginx + MySQL + PHP)环境
  • 网络安全知识问答微信小程序的设计与实现
  • ProCCD:复古CCD相机应用,重现经典胶片感
  • Java 进阶--集合:告别数组的“僵硬”,拥抱灵活的数据容器
  • VSCode开发调试Python入门实践(Windows10)
  • 长三角铁路今日预计发送418万人次,持续迎来出行客流高峰
  • 韩国代总统、国务总理韩德洙宣布辞职
  • 扬州市中医院“药膳面包”走红,内含党参、黄芪等中药材
  • 图忆|上海车展40年:中国人的梦中情车有哪些变化(上)
  • 人民日报社论:坚定信心、奋发有为、创新创造——写在“五一”国际劳动节
  • 内蒙古公开宣判144件毁林毁草刑案,单起非法占用林地逾250亩