Python学习笔记——import导入模块

来源:互联网 发布:人民网 网络彩票牌照 编辑:程序博客网 时间:2024/06/03 15:01

每天都要学点东西,昨天鼓捣小程序到8点多。。实在是被弄吐了。对小程序理解有限,所以好多问题无法自己解决,百度都百度不到。= = 中国的东西吧,谷歌更搜不到。难受。

不废话了,今天先学一下Python吧,关于import导入模块,又学到了一点点小东西。

1.关于模块导入

2.关于导入模块后,模块刷新了

3.避免模块的互相调用的实例

一、导入模块

我们一般写好了一个文件,就需要导入它,然后调用其中的函数,这个流程没错吧。

首先你得先有个女朋友。。(←_←)(手动滑稽,我们都是单身狗,哪里来的女朋友)

咳咳,首先先搞个py吧。

这里写图片描述

我直接扔到桌面上了。

这时候呢打开飘柔+R 输入cmd 进入命令行模式,输入ipython,进入py模式。

(注:如果你还没有安装环境等等东西,请看文章左边的Python分类,里面有详细的教程)

这里写图片描述

我们都知道如果要进行import一般情况下都导入当前目录下的
我的当前目录为:‘C:\Users\yue’

而我要导入的文件,就是刚才的文件,则存在于桌面上,能不能导进来呢?试试吧。

这里写图片描述

No module named ‘printname’
翻译君:没有这个模块啊亲

晕 = = 有这个模块啊,就在我的桌面上,只是没有在当前目录而已。

所以就有疑问了,他这个import也没说让我们写目录啊,那他是从哪里导入的呢?

让我们来看一看。

这里写图片描述

其实import是从这些目录从上到下的顺序开始找你要导入的模块的。
(首先是从当前目录找,如果当前目录没找到才去这些目录里面找)

py君没有在这写目录中找到你要导入的模块,那肯定是说没找到啊。

有的人说了,那我们把东西放在当前目录或者这些文件目录下不就行了。

大兄弟,咱们得考虑便于管理啊对不对。

所以我们要做的就是添加我们的模块目录到这个sys.path列表中来。

我的模块放在桌面,我就把桌面的目录添加进来。

这里写图片描述

好了这时候我们在导入我们的模块,然后调用模块内的方法就好了。

这里写图片描述

注意:每次退出ipython,这个sys.path都会复原,也就是说,用一次就要重新添加一次,所以把调用模块的目录写在调用文件中,是十分必要的。


二、导入模块后,模块刷新了

还有一种情况,我已经在ipython中导入模块了,在这期间,有人(包括自己)修改了这个模块,这时候我在调用模块中的方法,还是原来的,在导入一遍还是原来的。

这里写图片描述

有人说了,你关闭ipython,再次进入不就好了么?
我患病了,懒癌,没救了,就是不想退,就没有更直接的方法么?

有!

这里写图片描述

利用imp中的reload()方法就可以搞定这件事儿。
像我这种情况
(1)from imp import *
reload(模块名)
(2)import imp
imp.reload(模块名)
两种方法一个道理。

所以我建议,我们导入了模块,当再次使用这个模块的时候,最好能够reload()一下这个模块,尤其是不是独立开发的时候。一定要记住这个方法。


三、关于避免模块互相调用

我们直接看例子吧。

这里写图片描述

我想在a模块中的a方法调用b,我该怎么办?
我们复习下刚才学的知识

这里写图片描述

这时候我想在b模块中b方法调用a,那我就重复上面的工作呗。

这里写图片描述

OK,话说整天我就干这些个重复性的工作,真够没意思的。

好我们现在来总结下我们的代码:

a模块中的a方法:

from b import bdef a():    print('----a----')    b()

b模块中的b方法:

from a import adef b():    print('----b----')    a()

仔细看下,我调用a模块中的a方法,我是不是得先导入b模块中的b方法?
我导入b模块的时候肯定要导入a模块中的a方法吧?
这种情况下
a模块中的a方法中有b模块的b方法
b模块中的b方法中有a模块的a方法
明显就是个死循环嘛。

不信我们关闭ipython后再重新导入a模块和b模块试试

这里写图片描述

看看,不让导入了吧?

在实际编程中,我们应该这么做呢?
为了避免a中有b,b中有a的情况。

我们这样做

这里写图片描述

主模块调用子模块,从而避免子模块互相调用导致数据混乱和死循环现象的出现。

以上。

原创粉丝点击