python学习(2):自定义包结构及__init__.py模块和__all__变量的使用

使用python经常会导入外部包,所以自己写一个深层包结构,然后自己调用,会理解的比较深刻

首先创建如下图所示的包结构:共有3层文件夹,最里面的一层文件夹下面包含4个有关加减乘除的模块,分别提供了+-*/的运算方法。

注意:每一层新建的时候要建Python Package,而不是Directory。




一,import

import语句在深层包结构中的用法如下:

import myModule.simpleCompute.compute.addFunc
print(myModule.simpleCompute.compute.addFunc.add1(1,2))
看起来使用比较麻烦,首先从顶层目录一直向下导入到指定模块。调用时仍然需要从顶层一直到模块中的具体方法


二,from ... import ...

对比import,这种方法导入包后,再调用时就不需要使用包的全名啦。而且可以有不同的导入形式

1,直接从模块导入所需的方法

from myModule.simpleCompute.compute.addFunc import add1
print(add1(1,2))

2,先导入指定模块,再调用具体方法

from myModule.simpleCompute.compute import addFunc
print(addFunc.add1(2,3))

三,__init__.py模块

上面的结构中,每一层下面都有一个名为__init__.py的模块,该模块可以为空,用于标识python包


四,__all__变量

__all__变量是一个列表,可以在模块中和__init__.py中使用。

__all__变量结合from  ... import * 语句使用,__all__变量就是控制*所表示要引入的东西(模块,函数,类等)

1,如果在模块中使用该变量,下面是addFunc.py的代码:

__all__ = ['add1']     #只导入add1,而不会导入add2

def add1(*variaties):
    sum = 0
    for i in variaties:
        sum += i
    return sum

def add2(*variaties):
    sum = 0
    for i in variaties:
        sum += i
    return sum
if __name__ == '__main__':
    print(add1(1,2,3,4,5))

那么,在导入该模块下的所有函数时,只会导入列表中声明的函数

from myModule.simpleCompute.compute.addFunc import *
print(add1(1,1))
而此时,调用add2()就会报错


2,如果在__init__.py模块中设置__all__变量,则列表内容规定了import * 所导入的模块

我们在compute下的__init__.py模块中添加__all__变量,如下所示:

__all__ = ['addFunc','divFunc','mulFunc']        #列表中填写被引入模块的名称,没有.py

然后在import * 时,只引入被声明的模块

from myModule.simpleCompute.compute import *
print(divFunc.div(2,3))
print(addFunc.add1(1,2))
print(addFunc.add2(1,2))
print(mulFunc.mul(2,3))

而没有被声明的subFunc.py模块则不能使用




  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中,是一种组织Python模块的方法,它将相关的模块组合在一起,形成一个大的模块可以含子模块,以及其他资源文件。 在一个目录中,通常会有一个名为`__init__.py`的文件。这个文件的主要作用是标识该目录为Python,同时可以在其中编写一些初始化代码。 `__init__.py`可以为空文件,也可以Python代码。如果`__init__.py`文件存在,则在导入时会自动执行其中的代码。这就使得我们可以在的初始化过程中完成一些需要执行的操作,例如设置环境变量、导入必要的模块等。 例如,如果我们有一个名为`mypackage`的,那么它的目录结构可能如下所示: ``` mypackage/ __init__.py module1.py module2.py ``` 其中,`__init__.py`可以含一些初始化代码,例如: ```python # 在 __init__.py 中导入模块 from .module1 import * from .module2 import * ``` 这样,在导入`mypackage`时,就会自动导入`module1`和`module2`模块。 此外,`__init__.py`还可以定义级别的变量和函数,供内的模块使用。例如: ```python # 定义级别的变量 PI = 3.14 # 定义级别的函数 def square(x): return x ** 2 ``` 这样,在内的模块中,我们就可以直接使用`mypackage.PI`和`mypackage.square()`来访问这些变量和函数了。 总之,`__init__.py`文件是Python的重要组成部分,它可以帮助我们更好地组织和管理Python代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值