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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3758|回复: 0

Python __init__.py 文件使用

[复制链接]

8

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-5-3 06:55:24 | 显示全部楼层 |阅读模式 来自 中国
__init__.py的主要作用是:  G2 v7 T/ q; @) e/ h" O7 m3 a$ J
1. Python中package的标识,不能删除
+ W6 C6 H. D0 f3 X2. 定义__all__用来模糊导入
/ e, P5 m/ N6 R+ F7 I1 ?3. 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)' Q9 `& f# `1 X- A$ q( g* V4 b
__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。
, c% z6 `( _' U9 Q) L通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
, y# ~& O; O, c7 n& _) i注意这里访问__init__.py文件中的引用文件,需要加上包名。5 G. K0 \" u3 v5 ]5 ~
__init__.py中还有一个重要的变量,__all__, 它用来将模块全部导入。
8 p, Y! s9 O& K; p这时就会把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。1 t2 G4 F+ x* y! J: D$ Q  ~- T
可以了解到,__init__.py主要控制包的导入行为。要想清楚理解__init__.py文件的作用,还需要详细了解一下import语句引用机制:6 J8 z5 j( i  M
导入包
/ q$ Y6 ~5 ^9 u多个相关联的模块组成一个包,以便于维护和使用,同时能有限的避免命名空间的冲突。一般来说,包的结构可以是这样的:
# _( M. S. z' e; g; x有以下几种导入方式:9 q$ y" Q" p! K( J
使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间。
; S! b. m: V3 Q, i5 V应用举例:; A5 |6 B5 U' V" f0 d; u
程序结构:
. R3 B9 E- s6 G$ v2 R% Y5 C5 T-project- A2 _" c! ?# t9 i
-data( ~1 f+ ^/ B3 B
-src: b, Y. w/ _: V0 J
-filterCorpus.py% t6 q" R1 d, A( k
-translateMonolingual.py1 a' k$ M9 w1 L4 G6 c
问题描述:在translateMonolingual.py中引用filterCorpus.py中的函数fun1
4 E5 E, f0 n  N( {即使translateMonolingual.py和filterCorpus.py在同一文件夹下,若translateMonolingual.py中直接引用import filterCorpus会出错0 B: ]) n, O" A' u# }9 Q
。这是因为python3需要绝对路径引用,从project的根位置开始指明被引模块的位置。通用格式为:from directory import module。如果module存在于directory1下的directory2,那么建议写成from directory1.directory2 import module( p2 R  _. d# ?  O5 `
为什么需要__init__.py, O3 z5 R/ T3 i8 V: K- z
__init__.py文件用于组织包(package)。这里首先需要明确包(package)的概念。什么是包(package)?简单来说,包是含有python模块的文件夹。一个python模块(module)为一个py文件,里面写有函数和类。包(package)是为了更好的管理模块(module),相当于多个模块的父节点。
! A8 V9 u; z, l  d; |当文件夹下有__init__.py时,表示当前文件夹是一个package,其下的多个module统一构成一个整体。这些module都可以通过同一个package引入代码中。
9 h; [/ e0 z. G1 m" Q! c5 u; {__init__.py文件怎么写
1 P4 p9 T, ^- ^4 e- _6 o可以什么都不写,但如果想使用from package1 import *这种写法的话,需要在__init__.py中加上:% \6 j6 W& d, w, g" k6 ]# Q0 @) }
__all__= ['file1','file2']#package1下有file1.py,file2.py
6 _  i+ ~" I' I. R" \" wpython中__init__.py文件的作用实例! t8 g- n; O5 K/ L2 C
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。$ j$ C* |7 N/ V' Z5 o" A
那么,__init__.py还有什么别的功能呢?9 o- d8 `, t' {& U9 R% U
其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。
6 W$ X- e4 [" m$ N' ?- }我们可以再__init__.py文件中再导入其他的包,或者模块。
8 y* Q( Y) @4 L! A* f5 v& U1 S这样,当我们导入这个包的时候,__init__.py文件自动运行。帮我们导入了这么多个模块,我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。
. v& _2 \5 D) t) y  ^不需要一个个去导入module了。
, L4 z+ R' x: ~. A' k__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:
/ P- V' X9 U/ ~! _7 U- S# @from PackageName import ** V4 m. ]8 p) V& j2 g
这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:( Z7 s7 z; a) Z" J5 U2 p8 {+ C8 y
#文件 __init__.py
  j! P( H3 a; g3 Z& Z0 i__all__= ["Module1","Module2","subPackage1","subPackage2"]* ?- c9 I1 O2 n% z  p8 \+ C. Z* E
! R. `  ?9 y0 ?1 H" t% O9 B
来源:http://www.yidianzixun.com/article/0Ltf2Oat
6 \9 }  k; J6 n  K, T' C免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 18:15 , Processed in 0.075118 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

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