用python的反射,自制sklearn和numpy,pandas全局文档

本文介绍了一个Python脚本,用于探索导入的包内的全局元素,包括模块、函数和类。通过递归方式展示如sklearn、numpy和pandas等库的内部结构,帮助理解Python库的组织方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想不想知道import的包里,全局都有啥?

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from collections import Iterable
import numpy as np
import types
import sklearn
import sklearn.cluster

print(type(sklearn.cluster.AffinityPropagation))


# return(list(filter(lambda m: not m.startswith("__") and not m.endswith("__") and callable(getattr(self, m)), dir(self))))
def F(clsname, space):
    if '__' in clsname:
        return
    try:
        __import__(clsname)
        print('\033[31m' + space + clsname + "模块\033[0m")
    except:
        return
    m = sys.modules[clsname]
    for func in dir(m):
        if not (func.endswith("_") or func.startswith("_")):
            if func.islower():
                print(space + space + "        ." + func + "()")
            else:
                print(space + space + "        ." + func )

    attstrlist = dir(m)
    for  attstr in attstrlist:
        submodules = getattr(m, attstr)
        # if isinstance(submodules, types.ModuleType):
        #     print(space + "    " + submodules.__name__ + "模块")
        if isinstance(submodules, type):
            print(space + "    \033[0;34m" + clsname + "." + submodules.__name__ + "类\033[0m")
            for func in dir(submodules):
                if not (func.endswith("_") or func.startswith("_")):
                    print(space + space + "        ." + func + "()")
        if isinstance(submodules, Iterable):
            try:
                for sm in submodules:
                    if isinstance(sm, str) and len(sm) > 1:
                        F(clsname + '.' + sm, "  " + space)
            except:
                pass

# F("sklearn", "")
# F("numpy", "")
F("pandas", "")

 

大概长这样的,如果谁有兴趣,帮我完善一下。

python3 的反射不大好用,有些类型type没搞清楚。

目前能大概罗列出一个骨架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值