以前跟你们讲的是一些python的数据基础,从这篇文章开始,咱们开始正式学习python的模块化编程python
以前已经讲过怎么去定义一个方法,若是你是用python交互器(自带交互器,或者是ipython)来学习定义方法的话,你定义完方法后,而后退出交互器,而后你再来使用这个方法,很显然,是不会成功调用的,这是由于python交互器在你退出后,会清空内存,全部定义的变量和方法都会被清理编程
若是你想把定义好的方法用在你的新脚本文件中,这样就必须引入一种模块机制app
你能够把你写好的python代码保存到一个文件中(固然是以" .py "结尾的文件), 那么这样你就能够长久的使用这个代码中的方法和变量编辑器
一个新文件想要使用以前保存好的文件的方法,就必须经过import方法导入这个文件模块化
import的方法是用来作模块导入的,他主要有如下几种使用形式函数
In [1]: import sys In [2]: sys.path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
In [1]: from sys import path In [2]: path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
from 后面接模块名,import后面接具体的方法,能够接多个,用逗号隔开便可学习
In [1]: from sys import * In [2]: path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
上面的使用根据具体状况而定测试
以前在讲定义方法的时候讲到了斐波那契数列,这一次,咱们仍是用他作例子blog
首先在文本编辑器中写下这几段代码ip
保存为fibo.py
而后咱们继续在这个目录打开python交互器
In [1]: import fibo In [2]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [3]: fibo.fib2(200) Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
能够直接导入以前写好的python代码,调用里面写好的方法
__name__是一个系统变量,他能够显示当前函数执行过程当中的名称
简单来讲__name__就是全局的模块名称
例如上面那个例子
In [1]: import fibo In [2]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [3]: fibo.fib2(200) Out[3]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] In [4]: fibo.__name__ Out[4]: 'fibo'
在后面咱们会常常用到这样一个表达式
if __name__ = __main__:
全局代码都写在这行代码的后面,也就是说,在执行代码的时候会首先判断是否是在本地执行的,简单来讲,他保证了你的代码只能在你的文件中运行
接下来咱们要讲到的这个就很是重要了,在以前咱们添加的python文件和导入模块都是在同一个目录进行的,因此会成功执行
可是若是咱们要导入其余路径的python文件,这就有点麻烦了
首先咱们要熟悉一个命令
In [1]: import sys In [2]: sys.path Out[2]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython']
以前屡次使用过的命令
这个命令会显示全部的python模块的位置,以一个列表返回,通俗一点来说,就是python解释器会去这些路径去寻找python的文件,也就每一个模块
好比numpy这个模块文件的路径
若是咱们要添加本身的模块到路径中,就可使用append方法(前面说过sys.path是一个列表)
例以下面这行代码
In [5]: sys.path.append("E:\\Python-project\\Python-project\\module_study") In [6]: sys.path Out[6]: ['', 'D:\\Users\\susmote\\Anaconda3\\Scripts', 'D:\\Users\\susmote\\Anaconda3\\python36.zip', 'D:\\Users\\susmote\\Anaconda3\\DLLs', 'D:\\Users\\susmote\\Anaconda3\\lib', 'D:\\Users\\susmote\\Anaconda3', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Babel-2.5.0-py3.6.egg', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\Pythonwin', 'D:\\Users\\susmote\\Anaconda3\\lib\\site-packages\\IPython\\extensions', 'C:\\Users\\susmote\\.ipython', 'E:\\Python-project\\Python-project\\module_study']
注意在输入路径时要注意转义字符,路径已经成功加入到了列表中了
下面咱们测试有没有成功生效,仍是导入咱们以前定义的斐波那契数列的代码
首先随便进入一个目录,好比进入C盘
而后再进入python交互器
In [7]: import fibo In [8]: fibo.fib(200) 0 1 1 2 3 5 8 13 21 34 55 89 144 In [9]: fibo.fib2(200) Out[9]: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] In [10]: fibo.__name__ Out[10]: 'fibo'
能够成功导入
关于模块简单的就是这些,多练才能孰能生巧
官方博客 www.susmote.com