提问人:ersignee_ 提问时间:9/7/2023 更新时间:9/7/2023 访问量:61
如果我只导入函数而不是整个 sys 库,则“sys.dont_write_bytecode”不起作用
`sys.dont_write_bytecode` not working if I just import the function instead of the whole sys library
问:
我正在尝试删除用于导入模块的__pycache__
文件夹,如果我:
from sys import dont_write_bytecode
dont_write_bytecode = True
import folder.modulename as modulename
文件夹仍然会被创建,但如果我导入所有库,如下所示:
import sys
sys.dont_write_bytecode = True
import folder.modulename as modulename
未创建的文件夹。
有人可以解释为什么会发生这种情况,以及是否可以避免导入整个 sys
库?
答:
1赞
Tim Roberts
9/7/2023
#1
是的。当您编写 时,它会在命名空间中创建一个新名称,并将其绑定到与 中的对象相同的对象。当你写 时,你正在将一个不同的布尔对象绑定到你的名字,取代你的旧绑定。它对属于 的变量完全没有影响。from sys import dont_write_bytecode
sys
dont_write_bytecode = True
dont_write_bytecode
sys
然而,为了纠正另一个误解,使用 并不比 更有效。from sys import xxx
import sys
您编写的导入完全等同于:
import sys
dont_write_bytecode = sys.dont_write_bytecode
del sys
构造始终必须导入整个模块。from sys import
评论
0赞
ersignee_
9/7/2023
谢谢你的回答。我正在导入我需要的东西,这样我就可以节省一些空间,因为对于我使用它的程序,我的空间有限,所以我试图尽可能多地节省。我注意到您使用了关键字来删除模块。这是否有助于节省一些空间并在我使用后删除 sys 模块?del
0赞
user2357112
9/7/2023
@ersignee_:不,那只是取消了名称。你不会节省你试图节省的空间。(事实上,默认情况下必须加载 Python 解释器本身才能工作,因此即使您完全删除导入,您仍然不会节省该空间。该模块已经加载,因此导入所做的只是绑定一个名称。sys
0赞
Tim Roberts
9/8/2023
从字面上看,与这三行完全相同。from sys import dont_write_bytecode
评论
from sys import dont_write_bytecode
dont_write_bytecode
False
sys
False