【发布时间】:2021-12-30 09:50:27
【问题描述】:
我想重新加载itertools 以重新加载函数count。这是我从我的 Mac(M1-air) 中得到的。
import itertools
for x in itertools.count(3,2):
if x>30:
break
print(x)
# works fine
# 3 5 7 9 11 13 15 17 19 21 23 25 27 29
itertools.count = 10
print(itertools.count) # 10
import importlib
importlib.reload(itertools)
print(itertools.count) # 10
在我看来,最后的结果10应该改成原来的count函数,因为我用import lib.reload(itertools)重新加载了itertools。
按照其中一个 cmets 的链接,现在我看到 itertools 是一个内置包,importlib.reload() 不适用于内置包。那么,如何重新加载内置包呢?
出于多种原因,想办法恢复我所做的事情是很自然的。 (如果您知道我的意思,那么寻找对称性也具有理论上的意义)例如,git revert... 当然,我总是可以留出一个变量并稍后使用它
count = itertools.count
itertools.count = 10
# then later
itertools.count = count
【问题讨论】:
-
看来
itertools是一个内置包,这就是原因。那么如何重新加载内置包呢? -
您认为为什么需要这样做?在这种情况下,这是因为您已经替换了它的一个属性,所以...不要那样做。
-
那么,您希望第二个
print(itertools.count)提出AttributeError: module 'itertools' has no attribute 'count'? -
没有第二次打印会打印
itertools.count,这与修改前print(itertools.count)的结果相同
标签: python import itertools python-importlib