模块与包

一.模块

1. 定义:

在python中,一个.py文件就称为一个模块。

2. 为什么使用模块:

(1)提高了代码的可维护性
(2)编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块
(3)使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

3. 模块的种类:

Python标准库
第三方模块
应用程序自定义模块

4. 模块导入方法:

(1)import module1[, module2[, module3 …]
采用这种方式导入,在引用模块中的函数时,需要使用模块名.函数名() 的格式。
(2)from modname import name1[, name2[, …]*
采用这种方式导入,可直接通过函数名来引用函数。

5. 模块导入路径:

内置模块——>sys.path

6. 注意事项

(1)模块有两种用法:用于执行;用于被调用
(2)导入模块的过程:创建新的名称空间;执行被调用的模块
(3)导入模块时更改名字:import module1 as func
(4)查看导入模块中定义的名字:
内建函数dir用来查找模块中定义的名字,返回一个有序字符串列表

import module
dir(module)

如果没有参数,dir()列举出当前定义的名字。
dir()不会列举出内建函数或者变量的名字,它们都被定义到了标准模块builtins中,可以通过bultins列举出它们

import builtins
dir(builtins)

二.包

1. 定义:

包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

2. 导入:

包的导入也有import 和 from … import 两种模式,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

(1) 无论是import形式还是from…import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法
(2) 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)
(3) import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

3. __init__文件:

包区别于普通文件夹的最重要一点是包下面必定有一个__init__.py文件,而不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件,这个文件可以为空,但是也可以存放一些初始化包的代码。

4. 绝对导入和相对导入

最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:
绝对导入:以glance作为起始
相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
例:在glance/api/version.py中导入glance/cmd/manage.py

#glance/api/version.py
#绝对导入
from glance.cmd import manage
manage.main()

#相对导入
from ..cmd import manage
manage.main()

5. __name__

当直接执行.py文件时,__name__的值是’__main__’,如果通过另一个.py文件通过import导入该文件时,__name__的值是这个.py文件的名字。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值