quo*_*tor 1 python import logging
好的,所以我知道它from-import与"完全"相同import,除了它显然不是因为命名空间的填充方式不同.
我的问题主要是因为我有一个utils模块,它有一个或两个函数,我的应用程序中的每个其他模块使用,我正在努力合并标准库logging模块,据我所知,我需要做的像这样的排序:
import logging
logging.basicConfig(filename="/var/log") # I want file logging
baselogger = logging.getLogger("mine")
#do some customizations to baselogger
Run Code Online (Sandbox Code Playgroud)
然后在不同的模块中使用它我会再次导入日志记录:
import logging
logger = logging.getlogger("mine")
# log stuff
Run Code Online (Sandbox Code Playgroud)
但我想知道的是,如果我做了一个from utils import awesome_func遗嘱我的记录器肯定会被设置,记录模块是否会按照我想要的方式设置?
这也适用于其他通用设置.
你的问题的答案是肯定的.
有关导入过程的详细说明,请参阅Frederik Lundh的" 导入Python模块 ".
特别是,我将引用回答您查询的部分.
Python如何导入模块?
[...]
- 创建一个新的空模块对象(这本质上是一个字典)
- 将该模块对象插入sys.modules字典中
- 加载模块代码对象(如有必要,首先编译模块)
- 在新模块的命名空间中执行模块代码对象.代码分配的所有变量都可以通过模块对象获得.
以及使用from-import:
导入模块的方法有很多种
[...]
从X import a,b,c导入模块X,并在当前命名空间中为给定对象创建引用.或者换句话说,您现在可以在程序中使用a和b和c.
注意我已经省略了一些事情.值得阅读整篇文档,它实际上很短.
看起来像答案是肯定的:
$ echo 'print "test"
def f1():
print "f1"
def f2():
print "f2"
' > util.py
$ echo 'from util import f1
f1()
from util import f2
f2()
' > test.py
$ python test.py
test
f1
f2
$
Run Code Online (Sandbox Code Playgroud)