导入vs C的#include

时间:2010-01-21 20:39:31

标签: python import

在C:

#include "foo.h"

int main()
{
}

我相信“foo.h”会被有效地复制并粘贴到“#include”的位置。

Python导入是不同的,我找到了。

我刚刚在一个大的index.py文件中重构了一些最初有所有请求处理程序的GAE代码。

新目录树:

+
|
+- [handlers]     // all inherit webapp.RequestHandler
+- [models]       // all inherit db.Model
|
+- globals.py     // contains global variables for site-wide settings
+- index.py       // contains all handler redirects

[处理程序]是包含处理程序的文件夹

[ models ]是包含模型的文件夹

所以,index.py去了

from globals import *  # we need all of the globals

# ...

from handlers.FirstPage import FirstPage
from handlers.SecondPage import SecondPage
#.. etc.

不应该是handlers.FirstPage和handlers.SecondPage “看”全局变量中的所有内容,因为全局变量是先导入“处理程序之前”。*?

2 个答案:

答案 0 :(得分:3)

在C语言中它或多或少地“复制粘贴”代码,在Python中是完全不同的。

还记得Python的禅宗吗?

Explicit is better than implicit.
...
Namespaces are one honking great idea -- let's do more of those!

每次导入模块时,都会执行其代码,但保留定义的所有范围。因此,当您导入handlers时,您可以index访问globals的范围,但handlers模块无法访问globals模块,除非您明确允许它可以访问范围,导入它。

答案 1 :(得分:1)

是的,它们首先被导入,但它们首先被导入 index.py。要“可见”globals也需要在相应的文件中导入。