我目前正在将一个项目(以前的大文件)重新分解为几个单独的python文件,每个文件都运行我的应用程序的特定部分。
例如,GUIthread.py
运行GUI,Computethread.py
执行一些数学运算等等。
每个主题都包括使用math
,time
,numpy
等导入模块中的函数。
我已经有一个文件globalClasses.py
,其中包含我的数据类型等的类定义,每个.py文件在开始时导入,按照这里的建议:http://effbot.org/pyfaq/how-do-i-share-global-variables-across-modules.htm。这很好用。
我想要做的是在globals
文件中导入我的所有第三方模块,以便我可以编写import math
一次,但是我的所有项目文件都能够使用math
函数。
问题:
1。这可能吗?
2。这是一个好主意/它是很好的Python实践吗?
我目前的解决方案就是放
import math
import time
import numpy
...
(加上我使用的所有其他模块的导入)
位于我项目中每个文件的顶部...但这看起来并不整洁,并且在移动代码块时很容易忘记移动依赖项的import语句从文件到文件...
答案 0 :(得分:6)
另一个答案显示了你想要的是什么(有点)可能,但没有解决你关于良好实践的第二个问题。
使用import *
几乎总是被视为不良做法。请参阅文档中的"Why is import * bad?"和"Importing * from a package"。
请记住PEP 20 显式优于隐式。通过在每个模块中进行明确的特定导入(例如from math import sqrt
),从来没有混淆名称来自何处,模块的命名空间仅包含它所需的内容,并且防止了错误。
每个模块必须编写几个import
语句的缺点并不会超过尝试编写它们所带来的潜在问题。
答案 1 :(得分:4)
是的,我想有更优雅的方法可以节省多余的代码。假设你要导入一些模块math, time, numpy
(比如说),那么你可以创建一个文件importing_modules
(比如说)并将各个模块导入为from module_name import *
,所以importing_modules.py
可能看起来像这样:
<强> importing_modules.py 强>
from math import *
from numpy import *
from time import *
<强> main.py 强>
from importing_modules import *
#Now you can call the methods of that module directly
print sqrt(25) #Now we can call sqrt() directly in place of math.sqrt() or importing_modules.math.sqrt().