例如「;“删除未使用的导入”;在python中可能有不良副作用?

例如「;“删除未使用的导入”;在python中可能有不良副作用?,python,python-3.x,dynamic,import,Python,Python 3.x,Dynamic,Import,我正在寻找一个示例,说明删除未使用的导入如何导致破坏其他有效程序。我的问题是从这个问题中得到启发的: 有人能给我举个例子吗 第一次导入模块时,该模块中的所有代码都将运行。惯例和良好实践表明,模块不应对环境的其余部分进行任何更改,但情况并非总是如此(例如,当模块首次导入时,可以在整个程序的sys中更改几个变量) 有可能有人导入这样一个模块纯粹是为了它的副作用,然后再也不会在代码的其余部分显式引用它。像black这样的linting/formatting工具会将其检测为未使用,然后将其删除,突然,它

我正在寻找一个示例,说明删除未使用的导入如何导致破坏其他有效程序。我的问题是从这个问题中得到启发的:


有人能给我举个例子吗

第一次导入模块时,该模块中的所有代码都将运行。惯例和良好实践表明,模块不应对环境的其余部分进行任何更改,但情况并非总是如此(例如,当模块首次导入时,可以在整个程序的
sys
中更改几个变量)

有可能有人导入这样一个模块纯粹是为了它的副作用,然后再也不会在代码的其余部分显式引用它。像
black
这样的linting/formatting工具会将其检测为未使用,然后将其删除,突然,它所具有的副作用不再有效,程序因此中断


目前我还不能给出任何具体的例子,但我知道我以前至少见过一个,我个人一直在研究这样一个模块,直到我意识到这是一个糟糕的想法并停止了。

用Python导入模块时,您会执行该文件中的所有代码(以及所有导入的代码)

仅按惯例此代码没有副作用,通常只提供类等,但没有真正的理由必须如此。写得不好的模块可能会执行必要的步骤,以作为导入期间触发的代码的一部分正常工作

例如,完全可能有如下代码:

#my_db/init.py
从my_db.core导入MyDB
MyDB.do_非常重要的设置()
#my_db/other.py
导入my_db.init
从my_db.core导入MyDB
MyDB.do\u一些\u工作\u假设\u设置\u已经发生()
这可怕吗?对你应该这样做吗?没有


你能保证没有其他人有吗?

考虑到你有以下结构:

- root
   |--folder1
         |-- __init__.py
         |-- server.py
   |--main.py
以及以下内容:

# main.py
import folder1 as f
print("I am doing stuff but don't need f")


# __init__.py
from folder1 import server


#  server.py
# Start a server, or do something else you need

当您在
main.py
中删除
folder1
导入时,它将停止在
\uuuu init\uuuuuu.py
server.py
中执行操作。我会把它看作是坏代码,但这是可能的。

< p>我不知道这是否回答了你的问题,但是如果你删除了未使用的导入,前2个图标就不再显示了。