【发布时间】:2016-05-17 11:35:15
【问题描述】:
由于我对 python 比较陌生,所以语言的这个特定方面对我来说仍然是不透明的。
因此,假设我的项目包含许多文件和两个“服务”文件:__init__.py 和 __main__.py
在__init__.py 中只有:
if __name__ == "__main__":
import package.__main__
__main__.main()
在__main__.py中如下:
import package # ok
import package2 # ok
def main():
package.myfunc1() # can't find reference to myfunc1
package2.myfunc2() # can't find reference to myfunc2
所以我的问题是:为什么两个包都是可见的,而里面的函数不可见?我从谷歌阅读了一些源代码,但仍然无法发现它与我的代码之间的区别。我正在使用Python 3.5.1
我认为,__init__ 中的代码将启动 __main__,__main__ 将启动我的其余功能。
UPD
好吧,如果我把我的代码弄糊涂了,我深表歉意。
__init__.py 背后的想法是该文件是在添加第一个包时由 IDE 创建的,所以我决定用在第一个 github 条目上找到的 code 填充它(我的错,我虽然可以通过复制重新使用它-粘贴)。
严格来说我只需要python构造,相当于这个C代码:
header.h
void func1(){...} //in code1.c
void func2(){...} //in code2.c
#include "header.h"
int main() //in main.c
{
func1();
func2();
return 0;
}
还有下面的代码
import package
import package2
if __name__ == "__main__":
package.myfunc1()
package2.myfunc2()
和上面说的有完全相同的问题,所以问题不在__init__.py
【问题讨论】:
-
如果你不知道自己在做什么,就不要在
__init__.py里放代码,你只会徒劳地迷惑自己,一无所获。 (如果您确实知道自己在做什么,请同情下一位读者,不要在没有令人信服的理由和证明其合理性的情况下将代码放入__init__.py。) -
__init__.py在包结构中有一个定义的位置。我不认为__main__.py会。运行脚本时,__main__是基本命名空间的名称,因此是if __name__ ...成语。__main__的两种用法不一样。 -
@hpaulj:在 Python 3.1+ 中,如果一个目录或 zipfile 有一个
__main__.py文件,您可以通过指定目录/zipfile 的路径来运行它。 -
是的,这就是我在回答中发现的。
标签: python initialization main