京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3697|回复: 0

Python __init__.py 文件使用

[复制链接]

8

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-5-3 06:55:24 | 显示全部楼层 |阅读模式 来自 中国
__init__.py的主要作用是:
. b$ u7 h1 S! `: P1. Python中package的标识,不能删除$ I" N  J& G7 t- {- X6 u
2. 定义__all__用来模糊导入
6 q% t% }3 i$ B) ^3. 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)
6 ]2 @$ `+ w& v( t: k: T5 t__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。) F2 e  C# k' F, N; Q9 V
通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
1 J8 c: h. _8 F& X8 I' a& I! Y4 p注意这里访问__init__.py文件中的引用文件,需要加上包名。! f! n7 |! Y) G4 B' {
__init__.py中还有一个重要的变量,__all__, 它用来将模块全部导入。7 d# X% j5 @2 F' i, T# e0 l& c
这时就会把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。
) V8 F* f1 S# b7 h9 u7 S& C7 l. U可以了解到,__init__.py主要控制包的导入行为。要想清楚理解__init__.py文件的作用,还需要详细了解一下import语句引用机制:! W9 _! u& M! C9 D! m7 A# V, J
导入包" \$ V4 F: `: J2 U
多个相关联的模块组成一个包,以便于维护和使用,同时能有限的避免命名空间的冲突。一般来说,包的结构可以是这样的:
" |/ ^8 H# a9 ]2 Y  F& W有以下几种导入方式:
1 ]# N6 a% G" F3 P% p' x  o使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间。6 ]7 y: Z: v0 Q
应用举例:, z- q0 n7 O/ T) _# i6 e: e+ X
程序结构:; f# W3 x# B+ R  ^( z
-project2 J- G% {( d$ J9 p
-data2 e  e. X* M( F3 Y+ F
-src0 q+ h" t3 c8 g+ ^' i
-filterCorpus.py
! m- |( l% ~2 x( U$ ?5 g-translateMonolingual.py. G5 ]+ m3 o1 l' A
问题描述:在translateMonolingual.py中引用filterCorpus.py中的函数fun11 U0 m/ }- n5 U( y  I
即使translateMonolingual.py和filterCorpus.py在同一文件夹下,若translateMonolingual.py中直接引用import filterCorpus会出错
" s6 B# e) q  i' u& l。这是因为python3需要绝对路径引用,从project的根位置开始指明被引模块的位置。通用格式为:from directory import module。如果module存在于directory1下的directory2,那么建议写成from directory1.directory2 import module( e, p+ o1 j  {- ?
为什么需要__init__.py" L* H. m3 T6 u& i. P1 [! b( P
__init__.py文件用于组织包(package)。这里首先需要明确包(package)的概念。什么是包(package)?简单来说,包是含有python模块的文件夹。一个python模块(module)为一个py文件,里面写有函数和类。包(package)是为了更好的管理模块(module),相当于多个模块的父节点。
: e$ d! U" H3 h当文件夹下有__init__.py时,表示当前文件夹是一个package,其下的多个module统一构成一个整体。这些module都可以通过同一个package引入代码中。" q) y5 R0 Q! O
__init__.py文件怎么写8 D, v5 d- A* u3 e5 {5 T' t' C. K4 C
可以什么都不写,但如果想使用from package1 import *这种写法的话,需要在__init__.py中加上:& @( I/ @5 V# r/ X  U4 v. D5 ]+ _
__all__= ['file1','file2']#package1下有file1.py,file2.py
3 c( ^( P3 D/ z9 m; opython中__init__.py文件的作用实例/ M: p0 V# L3 i4 U: [
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。; s: g# a5 t( b8 M5 z; ~6 K
那么,__init__.py还有什么别的功能呢?3 a* L$ R& h, v0 I8 }) |/ {8 J
其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。
* Z* i1 h) d3 R" C我们可以再__init__.py文件中再导入其他的包,或者模块。; @$ x5 O9 S# ^1 h/ c1 u. C) ~
这样,当我们导入这个包的时候,__init__.py文件自动运行。帮我们导入了这么多个模块,我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。7 @) ^" H8 S" y: q2 x- Q( W
不需要一个个去导入module了。
) z5 r; a) e8 \/ R7 j& j, d__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:+ w$ H+ c# Y# H5 w$ m2 g
from PackageName import *0 ~% j& o$ T6 `) j
这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:, s0 H8 R+ j1 x/ J4 k1 A5 P# i
#文件 __init__.py
1 t. G. X, @* a9 B# l__all__= ["Module1","Module2","subPackage1","subPackage2"]# e2 {; j& w' S* r: b

+ A( e4 d4 A2 b  i9 r" m来源:http://www.yidianzixun.com/article/0Ltf2Oat
: K, D  @. w! X. J' ?( J免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-21 11:14 , Processed in 0.038170 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表