Python的import过程以及__init__.py的作⽤
python怎么读取py文件⾸先理解⼀下基本概念:
模块(module):其实就是⼀个py⽂件,⾥⾯定义了各种变量,函数,类。
包(package):⼀个⽂件夹就是⼀个package,package⾥⾯可包含xx.py、xx.pyc等⽂件。
元素(element):module⾥⾯的定义的变量啊、类啊等。
是否必须有__init__.py⽂件 ?
答:不是。
Python2的package下⾯必须有__init__.py⽂件,否则import package的时候会报错
但是Python3可有可⽆
init.py⽂件的作⽤?
Python2中导⼊包时会执⾏包下⾯的__init__.py⽂件,⽽Python3在导⼊包的时候如果有__init__.py⽂件就执⾏,如果没有就不执⾏。
导⼊元素的⽅法
导⼊包
⽅法: import package
程序执⾏的动作:执⾏package下⾯的__init__.py⽂件(Python3如果没有该⽂件就什么也不做),⽆法访问包下⾯的Python⽂件。
导⼊模块
⽅法1:from package1.package2.package3 import modle
⽅法2: import package1.dle
2种导⼊⽅法等效。
程序执⾏的动作:⾸先依次执⾏package1、package2、package3下⾯的__init__.py⽂件(Python3有就执⾏,没有就不执⾏),然后执⾏modle⽂件。⽆法访问Python⽂件⾥⾯的变量和⽅法。
导⼊元素(.py⽂件中的某个变量、某个类等)
导⼊变量:dle import my_element
导⼊⽅法:dle import my_function
程序执⾏的动作:⾸先执⾏package下⾯的__init__.py⽂件(Python3有就执⾏,没有就不执⾏),然后执⾏modle⽂件。然后就可以在你的⽂件中直接使⽤变量my_element和⽅法my_function了。( eg:print(my_element); )
⼀般情况下,我们导⼊模块都是为了使⽤其中定义的变量或者⽅法,所以需要使⽤最后⼀种⽅法。也可简写为dle import * 以导⼊modle中的全部变量和⽅法。
—init—.py⽂件会⾃动执⾏⼏次?
答:仅⼀次。举个栗⼦:
1、⾸先我们看⼀下例⼦的⽬录结构
[root@localhost test]# tree haha
haha
├── pack1
│ ├── —init—.py #这⾥本来是下滑线的,但是Markdone中不允许我这么写,我暂时还不会哈。
│ ├── me.py
└── test.py
2、看看我们的test.py
import*
//your codes
import pack1
按照上⾯的说明,这个代码⽚段执⾏时,会执⾏3次pack1的__init__.py⽂件,执⾏2次me.py。
然⽽实际却是,执⾏了 1 次pack1的__init__.py⽂件,执⾏了2次me.py。即,init.py仅在⼀个modle中第⼀次导⼊时会执⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。