模块

关注公众号“轻松学编程”了解更多。

1.1. 模块的概述

​ 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里的代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式,在python中,一个.py文件就称之为一个模块(Module)。

1.2. 模块优点

1、大大的提高了代码的可维护性

2、提高了代码的复用性,每当一个模块书写完毕,可以被多个地方引用

3、引用其他模块(包括内置模块和第三方模块与自定义模块)

4、可以避免函数名和变量名冲突

注意:取变量名的时候尽可能不要与内置函数的变量名冲突,查看python所有内置函数

1.3 模块的引入

语法: import 模块名

1.4 sys模块

sys 主要是针对于黑屏终端的库。

1.4.1 sys.argv

sys.argv 获取当前正在执行的命令行参数的参数列表

sys.argv:实现程序外部向程序内部传递参数,返回一个列表
argv[0]:当前的完整路径
argv[1]:传入的第一个参数

例如:在交互模式下

python D:/Learn/python/qianfeng/day18/test.py 1

回车会输出:

[‘D:/Learn/python/qianfeng/day18/test.py’,‘1’]

#test.py文件
import sys
#实现从程序外部向程序传递参数
print(sys.argv)
#当前程序名
sys.argv[0]
#第一个参数
sys.argv[1]
#在命令行中输入:python D:Learn\python\test.py 1
#注意1是从外部传进程序内部的一个参数
输出:
['D:\\Learn\\python\\test.py','1']

1.4.2 sys.platform

获取当前执行环境的平台

#mac
>>> import sys
>>> sys.platform
'win32'

1.4.3 sys.path

path是一个目录列表,供python从中查找第三方扩展模块,在python启动时,sys.path根据内建规则,PATHPATH变量进行初始化

import sys
print(sys.path)

自定义模块

1.1 自定义模块的创建

一个.py文件就是一个模块

创建一个say.py文件

#!/user/bin/env python
#encoding=utf-8
height = 180
weight = 60
def sayHello():
print("hello, nice to meet you!")
def sayGood():
print("you are a good man!")
def sayBey():
print("see you litter") #函数的调用
sayHello()
sayGood()
1.2 自定义模块的引用之整体引入

引入自定义模块

语法:

import module1[, module2[, module3[,…., modulen]]]

#引入内置模块
import time, sys
#引入自定义模块,不用添加.py后缀
import say
#注意:一个模块只会被引入一次,不管你执行了多少次import #使用模块中的内容
#格式: 模块名.函数名/变量名
say.sayHello()

注意: 在这里我们引入了整个say文件,因此say文件中的所有的方法与属性我们都可以访问。

1.3 自定义模块的引用之局部引用

语法:

from … import 语句

作用:从模块中导入一个指定的部分到当前命名空间

格式: from module import name1[, name2[, name3[,…namen]]]

注意:至少要导入一个

from say import sayGood,sayHello
sayGood()
sayHello()

弊端:

from say import sayGood,sayHello
def sayGood():
print("************")
#注意:程序内容的同名函数可以将模块中的函数覆盖
sayGood()
1.3 自定义模块的引用之 “*”

语法:

from module import *

作用:把一个模块中所有的内容全部导入当前命名空间

from say import *
#直接使用此函数
sayGood()

注意:弊端与部分导入的方式相同,不推荐使用这种方式导入.

注意:使用内置模块的时候,也可以使用上面三种引用的方法

1.4 import … as …

把引用的模块用别名表示。

import keyword as kw
print(kw.kwlist)

__name__属性

模块是一个可执行的.py文件,一个模块被另一个程序引入,若在引用的时候不想让模块中的有些方法执行.这时候我们就需要使用__name__属性去处理。

创建一个say2.py文件

#!/user/bin/env python
#encoding=utf-8 #作为模块执行
height = 180
weight = 60
def sayHello():
print("hello, nice to meet you!")
def sayGood():
print("you are a good man!")
def sayBey():
print("see you litter") #正常执行
#每一个模块都有一个__name__属性,当其值等于"__main__"时,表明该模块自身在执行,
# 否则被引入了其他文件
#若当前文件为程序的入口文件,则__name__属性的值为__main__
if __name__ == "__main__":
sayHello()
sayGood()
print(__name__)
else:
print(__name__)

以后的代码可以这么写:

def  main():
pass #其他函数 if __name__ == "__main__":
main()

总结:
1. __name__这个系统变量显示了当前模块执行过程中的名称,如果当前程序运行在当前模块中,则__name__的名称就是__main,如果不是,则为这个模块的名称.
2.__name__一般作为函数的入口,尤其在大型工程中,常常有if name == “mian”:来表明整个工程开始运行的入口.

模块搜索路径:

当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件(模块名.py)。

思考:上述已经知道模块的用法以及好处,但是如果不同的人编写的模块名相同怎么办?

解决:为了避免模块名冲突,python又引入按目录来组织模块的方法,称为包.

特点:引入包以后,只要顶层的包不与其他人发生冲突,那么模块都不会与别人的发生冲突

注意:目录只有包含一个叫做"init_.py"的文件,才被认做是一个包,主要为了避免一些滥竽充数的名字,基本上目前这个文件什么也不用写.

通俗一点:包是一个包含____init____.py文件的目录,该目录下一定得有这个____int____.py文件和其它模块或者子包.

注意:每个包目录下都会有一个____init____.py文件,这个文件必须存在,否则python就把这个目录当成普通目录,而不是一个包,init.py可以是空文件,也可以有python代码,因为____init____.py本身就是一个模块.

自己创建模块时注意命名,不能和python自带的模块名称冲突,例如系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块.

安装第三方模块

在python中,安装第三方模块,是通过setuptools这个工具完成的,python有两个封装了setuptools的包管理工具:easy_install 和pip,目前官方推荐pip

方法一:

注意:

1.若使用的mac或linux,安装pip本身这个步骤就可以跳过了.

2.若正在使用windows,请参考安装python的内容,确保安装时勾选了pip和add python.exe to path.

在命令提示符窗口下尝试运行pip,如果windows提示未找到命令,可以重新运行安装程序添加pip

我们来安装第一个第三方库—Pillow,这是python下非常强大的处理图像的工具库,一般来说,第三方库都会在python官方的pypi.python.org[https://pypi.python.org/pypi] 网站注册,要安装第三方库必须先知道该库的名称,比如安装Python Imaging Library的名称叫Pillow,因此安装Pillow的命令就是:
pip install Pillow
‘’’
若windows如果报错,则输入pip install --upgrade pip
更新一下pip的版本
若仍然报错,则换个网络
在pip下载东西,若是出错,则使用命令升级pip,若还是有错,大部分是网络的问题.
window下一般只会使用python3.6的环境
Linux 或者mac下使用一般默认是python2.7环境,若是想使用python3.6,则使用命令python3

方法二、在pycharm中直接安装
file->setting->project->project interpreter->点击界面右方的”+“->
弹出一个新的窗口,在窗口的搜索框搜索要添加的第三方模块->点击install->success。

1、使用Image模块

有了PIL,处理图片易如反掌,随便找个图片生成缩略图

# 引入了第三方库
from PIL import Image
#打开图片,路径需要注意
im = Image.open("test.png")
#查看图片的信息
print(im.format, im.size, im.mode)
# 设置图片的大小,注意:图片的大小给定的是个元组
im.thumbnail((200, 100))
#保存成新的图片
im.save("thum.jpg","JPEG")
输出:
PEG (497, 325) RGB

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python模块导入(包)的更多相关文章

  1. 一文解决python模块导入

    python 模块导入 原理 查找是按照 sys.path 中的路径挨个扫描.若都不存在则提示error. sys.path路径第一个是当前运行脚本所在的目录,其后是PYTHONPATH(一般若步专门 ...

  2. Python/模块与包之模块

    Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...

  3. python模块导入细节

    python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: ...

  4. 【转】python模块导入细节

    [转]python模块导入细节 python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码 ...

  5. Python模块、包、异常、文件(案例)

    Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...

  6. 【Python】解析Python模块与包

    模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. import语句是用来导入模块或者从模块里导入特定的类或者函数.如前面我们用过的math模块,从而可以 ...

  7. Python——模块和包

    一.概念 """模块():一个python文件,以 .py 结尾,包含python对象定义和语句.模块可以定义函数.类.变量,也可包含可执行文件 导入模块: 1.impo ...

  8. (三)运用Python模块和包

    1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...

  9. Python模块04/包/logging日志

    Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...

随机推荐

  1. python排序算法总结和实现

    ------------------希尔排序------------- 一直没搞懂希尔排序怎么搞得 def Shell_sort(L): step = len(L)/2 while step > ...

  2. Linux下彻底删除安装的rpm包

    如何彻底Linux系统下安装的rpm包?现以mySQL为例进行介绍: 一.使用以下命令查看mysql安装情况 [root@xpq mysql]# rpm -qa|grep -i mysql MySQL ...

  3. python 给IDLE添加行号

    [LineNumbers] enable=1 enable_editor=1 enable_shell=1 visible=1 [LineNumbers_cfgBindings] linenumber ...

  4. PADS Layout VX.2.3 灌铜之后只显示灌铜外框,没有显示整块铜皮

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 使用Copper Pour功能,画了一个灌铜区,并分配了网络. Tools > Pour Manager,打 ...

  5. RHSA-2017:2930-重要: 内核 安全和BUG修复更新(需要重启、存在EXP、本地提权、代码执行)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  6. ConcurrentHashMap源码解析,多线程扩容

    前面一篇已经介绍过了 HashMap 的源码: HashMap源码解析.jdk7和8之后的区别.相关问题分析 HashMap并不是线程安全的,他就一个普通的容器,没有做相关的同步处理,因此线程不安全主 ...

  7. 在linux下搭建l2tp隧道

    搭一个l2tp隧道,拓扑如下 两台机器是CentOS5,内核选上CONFIG_LEGACY_PTYS选项后自己编译的,l2tp是已经停更的l2tpd-0.69.先在LS上配置IP地址,iptables ...

  8. 【UR #12】实验室外的攻防战

    UOJ小清新题表 题目内容 依然没有粘题面主要是UOJ的题面都太长了qwq UOJ链接 一句话题意:给出两个序列 \(A\) 和 \(B\),对于 \(A\) 进行若干次操作,每次给出一个 \(i\) ...

  9. firstBlog

    第一篇博客 markdown语法的学习 基本语法 标题与段落 在文字前面加1-6个#号来表示来代表一级标题到六级标题 一级标题 五级标题 列表 对于无序列表,可以使用字符-,+和*作为列表的标记 - ...

  10. beego增删改查

    package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go ...