模块与包

1、什么是模块

逻辑上来说模块就是一组功能的集合,实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名加上.py后缀
模块中可以定义函数、类、变量,模块里也可以包含可执行的代码
模块分类:python内置模块、第三方模块、自定义模块

2、模块的作用

模块让你能够有逻辑的阻止你的python代码
把相关的代码分配到一个模块里能让代码拥有更好的可读性,让人更容易读懂和维护

3、模块的导入

3.1 导入模块

示例如下:

import datetime
print(datetime.datetime.now())

3.2 导入多个模块

导入多个模块有两种写法
写法一:

import datetime
import os
import sys

写法二:

import os,sys,datetime

两种写法效果是一样的

3.3 重复导入一个模块

需要注意的是:一个模块在同一个namesapce中只会被导入一次,不管你执行了多少次import,这样可以防止导入模块被反复执行。
我们可以通过以下示例来测试下重复导入时实际的导入次数
现有模块module1.py

# file_name: module1.py

print("加载当前模块")

我们在相同路径下的module2.py中多次导入module1模块,预期是print("加载当前模块")只会打印一次

# file_name: module2.py
import module1.py
import module1.py
import module1.py

执行module2.py,结果如下:

加载当前模块

Process finished with exit code 0

3.4 模块重命名

在导入模块的时候还可以对模块进行重命名,从而方便我们使用,并且如果当前文件中存在同名的方法或者变量,也可以通过这种方式避免冲突
示例:

import datatime as date
print(date.datetime.now())

3.5 from ... import ...语句

基本用法:

from time import sleep

同样支持重命名:

from time import sleep as sl
for i in range(10):
    sl(1)
    print("第 %d 次输出" % i)

全量导入:

from time import *

这种导入方法比较消耗资源,一般不建议使用

3.6 import与 from ... import ...语句的区别

from ... import ...与直接import的区别是:
import语句的导入会新建一个namespace,将模块中的名称存放在该空间中
from import会将name1、 name2单个导入到当前的namespace中,既然是导入到当前的namespace中,那就可以直接拿来使用,而不是再添加模块名称

3.7 模块重读

如果from ... import ....导致了名称重读,则取后定义的那个
示例:

# file_name:module1.py
def order():
    print("我是模块1的order方法")

在另一个模块中导入该模块的order方法,并在当前模块重写一个order同名的方法

# file_name: module2.py
from module1 import order

def order():
    print("我是模块2的order方法")

oder()

这里引用order函数,会使用module2.py模块中的order函数

4、搜索路径

当解释器遇到import语句,如果模块在当前的搜索路径就会被导入,搜索路径是一个解释器会先进行搜索的所有目录的列表,如果想要导入某模块,需要将命令放在脚本的最顶端
当我们导入一个模块时,python解析器对模块的搜索顺序是:
1.当前目录
2.在环境变量PYTHONPATH下的每个目录
3.默认路径,在Unix下默认路径一般是/usr/local/lib/python模块搜索路径存储在system模块的sys.path变量中,变量里包含当前目录、PYTHONPATH和由安装过程决定的默认目录

PYTHONPATH变量:作为环境变量,PYTHONPATH由装在一个列表中的许多目录组成,PYTHONPATH的语法和shell变量PATH的一样。
在Windows系统,典型的PYTHONPATH如下:
set PYTHONPATH=c:\python27\lib;
在Unix系统,典型的PYTHONPATH如下:
set PYTHONPATH=c:\python27\lib;

5、dir()和reloads函数

dir()函数
一个排好序的字符串列表,内容是一个模块里定义过的名字
返回的列表容纳在了一个模块里定义的所有模块、变量和函数

reloads()函数
当一个模块被导入到一个脚本,模块顶层部分代码只会被执行一次
因此,如果想要重新执行模块里顶层部分的代码,可以使用reload()函数,该函数会重新导入之前导入过的模块,该方法常可以用来加载PYTHONPATH

6、包

在Python中包是一个层次分明的文件目录结构,他定义了一个由模块及子包,和子包下的子包及模块等组成的python应用环境
简单来说,包就是文件夹

包与模块小结:

模块和包最本质的作用是降低系统代码的复杂性,易于维护、扩展和管理代码工程
当我们写的代码越来越多的时候,将所有的代码放入同一个.py文件中会显得难以维护,解决办法则是代码拆分入不同的.py文件中,
形成不同的模块,这样做还可以使同名变量互不影响,需要注意的是,模块不应与系统内置的函数重名
同时,不同的.py文件也可能同名,这时候就可以考虑将其放入不同的文件夹中,形成不同的包,防止同名模块的影响
在python中一个文件可以看做一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用
包将有联系的模块阻止在一起,有效避免模块名称冲突问题,让应用组织结构更清晰,区别包和文件夹的重要特征就是包文件夹内
每一层目录都有初始化文件init.py

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容