python的包和模块

一. 包与模块的名字

1.module

通常,模块就是一个文件,模块名即为文件名。

2.package

包物理意义上来说是一个文件夹,包名就是该文件夹的名称。包目录下为首的一个文件便是 __init__.py;如果不存在这个文件,那么它就只是一个单纯的文件夹,而不是包。包中存放一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

 

二.import导入模块

目录

  • 采用 import module 的方式导入
import sub_package.p2

print(sub_package.p2.a)
  • 采用 from module import parameter/module/* 的方式导入
from sub_package import p2

print(p2.a)
print(p2.b)
from sub_package.p2 import a, b

print(a)
print(b)
from sub_package.p2 import *

print(a)
print(b)

但是不推荐*来导入,这样导入的不是很明确,可能会导入发生错误

在导入模块时,程序会默认执行该模块

在使用*导入时,可以在被导入的模块开始定义 __all__属性来限制可以导入的变量,如下

__all__ = ['a', 'b']


a = 2
b = 1
c = 3

 

三.__init__.py的用法

__init__.py也是一个模块文件,但是不同于普通的模块文件,它的__name__是它的包名。

在导入包时,会自行的运行该包下的__init__.py文件。

举例:

在包下的__init__.py中加入一行print输出

print('this is a file whose name is __init__')

在p1模块中import p2模块,然后执行p1

p1模块

import sub_package.p2

print(sub_package.p2.a)

控制台

所以我们可以在__init__.py中做一些初始化

 

四.模块内置变量

可以同 dir() 函数来获取模块的所有变量

print(dir())

控制台输出

含有首位下划线的变量就是模块的内置变量

  • 当模块作为导入的模块时

              __doc__ : 该模块的注释

              __file__  : 模块的路径名(Win下的完整路径名)

              __name__ : 模块的文件名(包含顶级包名(与程序入口的同级包)的完整文件名)

              __package__ : (包含顶级包名的完整包名)

  • 当模块作为程序入口时

              __doc__ : 该模块的注释

              __file__  : 与执行该模块的位置有关,就是从执行的位置开始,到该文件名结束。

              __name__ :  __main__

              __package__ : 无,程序入口不属于任何包

 

五. __name__的经典应用

__name__通常用来判断该模块是作为程序入口还是导入的模块,以此作出不同的行为

 

六. 相对导入和绝对导入

  • 相对导入(即 import .module_name)

程序入口不支持相对导入,原因就在于程序入口是不属于任何包的,也就不存在 . 回到上一级包的操作

  • 绝对导入(即以顶级包的路径名开始的完整路径名导入)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值