调整Python标准库

r6l8ljro  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(167)

我想知道对于给定的Python 3.x安装,标准库中有多少对象和方法,以便与不同的语言进行比较,为此,我编写了一个script.py

from sys import stdlib_module_names
from inspect import isclass
from importlib import import_module

modules = stdlib_module_names - {'this', 'antigravity'}

col = []
for m in modules:
    try:
        col.append(dir(import_module(m)))
    except:
        pass

col = {item for sublist in col for item in sublist}

cnt = 0
for thing in col:
    try:
        if isclass(eval(thing)):
            cnt += len(dir(thing))
    except:
        pass

print(cnt + len(col))

我注意到dir并不精确,它每次运行都会给出不同的值。

  • 命令行:python script.py给出14075到14092个东西,
  • VS代码重复:第1次和第2次运行不同,后续运行与第2次相同。
    问题

1.这个结果在大概正确的范围内吗?
1.有没有一种不变的方法来获取stdlib_module_names中函数和方法的数量?

lymnna71

lymnna711#

1.这个结果在大概正确的范围内吗?
不,这段代码没有任何意义。你迭代dir,它们都是字符串,然后你eval每个字符串。大多数时候,eval调用会失败,你看不到NameError,因为你在那些上面使用了except: pass。当名字碰巧在内置命名空间中时,有时这些eval会成功(例如,“dict”或“IndexError”)。但是,通过在这些内置函数上累积len(dir(thing)),您并没有真正计算出任何有意义的东西。
1.有没有一种不变的方法来获取stdlib_module_names中函数和方法的数量?
不完全是。我想你会得到一个更好的结果与一个简单的grep的源代码的cpython/Lib目录的“def“和“类“。

相关问题