15_Python模块化编程_Python编程之路

之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程
下面我们解释一下什么叫做模块
之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交互器,或者是ipython)来学习定义方法的话,你定义完方法后,然后退出交互器,然后你再来使用这个方法,很显然,是不会成功调用的,这是因为python交互器在你退出后,会清空内存,所有定义的变量和方法都会被清理
如果你想把定义好的方法用在你的新脚本文件中,这样就必须引入一种模块机制
你可以把你写好的python代码保存到一个文件中(当然是以" .py "结尾的文件), 那么这样你就可以长久的使用这个代码中的方法和变量
一个新文件想要使用之前保存好的文件的方法,就必须通过import方法导入这个文件
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']
上面的使用根据具体情况而定
自己定义模块
之前在讲定义方法的时候讲到了斐波那契数列,这一次,我们还是用他做例子
首先在文本编辑器中写下这几段代码

保存为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__是一个系统变量,他可以显示当前函数执行过程中的名称
简单来说__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
15_Python模块化编程_Python编程之路的更多相关文章
- 01-Python的介绍_Python编程之路
首先用一句业内非常出名的话来介绍Python "人生哭短,我用Python" 这也是Python宣传时经常说的一句话 从这句话中,可以非常清楚Python他到底优点在哪里,为什么要 ...
- 07_Python的控制判断循环语句1(if判断,for循环...)_Python编程之路
Python的数据类型在前几节我们都简单的一一介绍了,接下来我们就要讲到Python的控制判断循环语句 在现实编程中,我们往往要利用计算机帮我们做大量重复计算的工作,在这样的情况下,需要机器能对某个条 ...
- 09_Python定义方法_Python编程之路
有关Python判断与循环的内容我们上几节已经跟大家一起学习了,这一节我们主要针对def 做一个讲解 def 定义一个方法 在项目编程中,我们往往要做很多重复的事,比如一个排序的功能(当然Python ...
- 02-Python的下载和安装_Python编程之路
原文发布在特克斯博客www.susmote.com 之前给大家讲了关于python的背景知识,还有Python的优点和缺点,相信通过之前的介绍很多人已经清楚自己到底要不要选择学习Python,如果已经 ...
- 03-第一个脚本程序以及输入输出_Python编程之路
上节课已经教大家安装了Python的解释器,那么这节课我们就可以正式来写代码了 说明:在下面的代码演示中,我将大部分使用python交互器演示代码的输入输出,注意">>>& ...
- 04_Python的数据类型1数值和字符串_Python编程之路
上一节我们通过一个helloworld程序学习python的一些简单操作,还有输入与输出 这节我们来讲Python的数据类型与变量的操作 Python的交互器 在讲这个之前,我要先讲一下python的 ...
- 06_Python的数据类型3元组,集合和字典_Python编程之路
上一节跟大家讲了Python的列表,当然不是完整的讲完,后续我们还会提到,这一节我们还是来讲Python的数据类型 首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面 ...
- 10_Python函数方法加深_Python编程之路
上节课已经简单的跟大家讲了如何定义一个方法,但是并没有深入去讲,这一节我们继续来学习定义方法中需要注意的几点 默认参数 前面我们讲到定义一个方法时是可以传递参数的,除了这个功能,实际上python在定 ...
- 11_Python的列表推导式_Python编程之路
上一节我们结束了有关python的方法相关内容 这一节我们先来学习python的列表推导式 之前跟大家说过range方法的使用,在这里我就不做过多的解释了,如忘记了,请翻阅之前的介绍 列表推导式,是P ...
随机推荐
- Docker学习笔记 - Docker的数据卷容器
一.什么是数据卷容器 如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器. 数据卷容器:用于容器间的数据共享,主动挂载宿主机目录,用于其他容器挂载和共享. 二.数据卷容器的操作 1.创建 ...
- QT5.5与MYSQL5.6数据库连接的具体方法与实现
由于毕设需要用到QT读取数据库中的数据,并将数据保存至数据库中.花了一天的时间,总算实现了从QT中读取数据库中的数据.网上相关资料很多,但是写得不是很全,中间出现了一些问题,解决起来比较麻烦.所以本文 ...
- JAVAFX-5 开发应用
fx 属性与布局 属性与布局是一个具备gui开发能力的开发者,快速进入开发必备的知识储备,下面简单说一说常用的属性,与布局 颜色 颜色 在 javafx.scene.paint.Color 类中提供了 ...
- Mysql官方文档翻译系列14.18--MySql备份与恢复
原文链接: (https://dev.mysql.com/doc/refman/5.7/en/innodb-backup-recovery.html) The key to safe database ...
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) C. Classroom Watch
http://codeforces.com/contest/876/problem/C 题意: 现在有一个数n,它是由一个数x加上x每一位的数字得到的,现在给出n,要求找出符合条件的每一个x. 思路: ...
- ROS系统MoveIt玩转双臂机器人系列(一)
一.ROS系统的MoveIt模块简介 机器人操作系统ROS目前最受关注的两个模块是导航(Navigation)和机械臂控制(MoveIt!),其中,机械臂控制模块(后面简称MoveIt)可以让用户快速 ...
- 【转】cookielib模块
cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用本模块 的CookieJar类的对象来 ...
- background属性的学习整理转述
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! background我们一般用到的的属性有: background-attachment:背景(图片)是否 ...
- Spark RDDs vs DataFrames vs SparkSQL
简介 Spark的 RDD.DataFrame 和 SparkSQL的性能比较. 2方面的比较 单条记录的随机查找 aggregation聚合并且sorting后输出 使用以下Spark的三种方式来解 ...
- .Net Core 通过依赖注入和动态加载程序集实现宿程序和接口实现类库完全解构
网上很多.Net Core依赖注入的例子代码,例如再宿主程序中要这样写: services.AddTransient<Interface1, Class1>(); 其中Interface1 ...