Python的import过程以及__init__.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.package1.package1.modle
    2种导入方法等效。
    程序执行的动作:首先依次执行package1、package2、package3下面的__init__.py文件(Python3有就执行,没有就不执行),然后执行modle文件。无法访问Python文件里面的变量和方法。

  • 导入元素(.py文件中的某个变量、某个类等)
    导入变量:from packge.modle import my_element
    导入方法:from packge.modle import my_function
    程序执行的动作:首先执行package下面的__init__.py文件(Python3有就执行,没有就不执行),然后执行modle文件。然后就可以在你的文件中直接使用变量my_element和方法my_function了。( eg:print(my_element); )

一般情况下,我们导入模块都是为了使用其中定义的变量或者方法,所以需要使用最后一种方法。也可简写为rom packge.modle import * 以导入modle中的全部变量和方法。

—init—.py文件会自动执行几次?

答:仅一次。举个栗子:
1、首先我们看一下例子的目录结构
[root@localhost test]# tree haha
haha
├── pack1
│ ├── —init—.py #这里本来是下滑线的,但是Markdone中不允许我这么写,我暂时还不会哈。
│ ├── me.py
└── test.py

2、看看我们的test.py

from pack1.me import *
//your codes
import pack1
import pack1.me 

按照上面的说明,这个代码片段执行时,会执行3次pack1的__init__.py文件,执行2次me.py。
然而实际却是,执行了 1 次pack1的__init__.py文件,执行了2次me.py。即,init.py仅在一个modle中第一次导入时会执行。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值