码迷,mamicode.com
首页 > 编程语言 > 详细

Python中module文件夹里__init__.py的功能

时间:2021-05-23 23:12:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:绝对路径   功能   字节   this   director   str   win7   父节点   pack   

怎么引用模块

环境:win7 + python3.5.2
文档结构:

-project
?-data
?-src
??-filterCorpus.py
??-translateMonolingual.py

问题描述:在translateMonolingual.py中引用filterCorpus.py中的函数fun1

from src import  filterCorpus
filterCorpus.fun1()

即使translateMonolingual.py和filterCorpus.py在同一文件夹下,若translateMonolingual.py中直接引用import filterCorpus会出错
。这是因为python3需要绝对路径引用,从project的根位置开始指明被引模块的位置。通用格式为:from directory import module 。如果module存在于directory1下的directory2,那么建议写成from directory1.directory2 import module

一般来说,需要引用python模块,可以用如下形式:

import xxx
import xxx as xx
from xxx import xx

 比如我们引入numpy模块:

In [21]: import numpy

In [22]: numpy
Out[22]: <module numpy from /home/chia/anaconda2/lib/python2.7/site-packages/numpy/__init__.pyc>

然后在输入numpy,实际上我们看到,module numpy的路径实际上是一个__init__.pyc的文件pyc文件是python编译器编译生成的字节码文件。通常py文件改动就会生成一个pyc,如果有pyc存在的话默认用pyc。

python module中的__init__.py文件实际上是执行import命令时访问的文件。换句话说,init的py文件是一个module的指示器。如果一个文件夹里面有这个py文件,那么它就可以被视为一个包,通过import引入,如果没有,则无法引入。

如果我们自己写一些函数,想要当做一个python 的模块通过import导入的话,有两种方式。

  • 一种是写成xxx.py文件,然后通过from xxx import xfun

比如:

# this is util.py
def sayHello():
    print "Hello"

然后在同一个文件夹中另一个文件中,调用这个模块

# this is main.py
from util import sayHello

这样是可行的。

  • 如果写的函数比较多,而且又有不同类别的话,我们就需要把所有的文件和文件中的函数放在一个文件夹中了。那么,这个文件夹里面就要放一个空白的__init__.py

当然,我们说__init__.py只要有就可以,但是它本身是一个py文件,因此可以在里面写一些语句。

比如一个较为重要的变量是 __all__,它一般定义为module中的所有子文件。

比如一个文件夹叫做 utils,其中有a.py, b.py
那么,__all__就可以写成:

__all__ = [a, b]

定义了这个all变量的好处是,我们在进行模糊引入的时候,即:

from utils import *

就可以将所有的子文件import进来,比如我们就可以引用utils.a了。

为什么需要_init_.py

_init_.py文件用于组织包(package)。这里首先需要明确包(package)的概念。什么是包(package)?简单来说,包是含有python模块的文件夹。一个python模块(module)为一个py文件,里面写有函数和类。包(package)是为了更好的管理模块(module),相当于多个模块的父节点。

当文件夹下有_init_.py时,表示当前文件夹是一个package,其下的多个module统一构成一个整体。这些module都可以通过同一个package引入代码中。

_init_.py文件怎么写
可以什么都不写,但如果想使用from package1 import *这种写法的话,需要在_init_.py中加上:

__all__ = [file1,file2] #package1下有file1.py,file2.py

引用时使用写法

from package1 import *

file1.func1()

 

Python中module文件夹里__init__.py的功能

标签:绝对路径   功能   字节   this   director   str   win7   父节点   pack   

原文地址:https://www.cnblogs.com/zhjblogs/p/14727847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!