arreaty 发表于 2020-9-12 12:49:43

惊了!用不同方法输出的 BIF 的个数居然不一样?

各位前辈好,新人报道!

今天刚开始学 Python ,有一道课后习题问 BIF 的数量,为了偷懒,不想一个个数,就网上搜了一下,发现了两种方法,但输出的结果却不一样,一个输出“153”,一个输出“154”,请问哪里出了问题?(python 版本 3.8.5)

>>> len(dir(__builtins__))
153
>>> import builtins
>>> len(dir(builtins))
154
>>>

疾风怪盗 发表于 2020-9-12 12:55:57

import builtins
a=dir(builtins)
print(len(a))
print()
b=dir(__builtins__)
print(len(b))

都是153

arreaty 发表于 2020-9-12 13:37:25

疾风怪盗 发表于 2020-9-12 12:55
都是153

感谢回复!
你这个的确都是 153 ,但现在问题是,我那种写法为什么会不一样呢,难道是多出来一个空的 object ?

疾风怪盗 发表于 2020-9-12 13:47:21

arreaty 发表于 2020-9-12 13:37
感谢回复!
你这个的确都是 153 ,但现在问题是,我那种写法为什么会不一样呢,难道是多出来一个空的 ob ...

写法?不是一样的写法么?
import builtins
print(len(dir(builtins)))
print()
print(len(dir(__builtins__)))
哪里不一样了?

永恒的蓝色梦想 发表于 2020-9-12 14:01:57

因为第二次执行会多一个 _ 。

sunrise085 发表于 2020-9-12 14:23:18

这两个本来就不完全一样,你这样写,builtins 多一个 '_'

__builtins__是对内建模块 builtins 的引用,使用__builtins__的时候不需要import,但是使用 builtins 是需要import的。
在 __main__ 模块中,__builtins__就是 builtins的完全引用,两者是完全一样的
在非 __main__ 模块中,__builtins__ 仅仅是 builtins.__dict__ 的引用,是一个字典

arreaty 发表于 2020-9-12 16:24:16

永恒的蓝色梦想 发表于 2020-9-12 14:01
因为第二次执行会多一个 _ 。

的确,我发现前一个会对后一个产生影响,谢谢

arreaty 发表于 2020-9-12 16:30:20

sunrise085 发表于 2020-9-12 14:23
这两个本来就不完全一样,你这样写,builtins 多一个 '_'

__builtins__是对内建模块 builtins 的引用, ...

感谢解答
页: [1]
查看完整版本: 惊了!用不同方法输出的 BIF 的个数居然不一样?