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