Python学习—模块与包

模块

1.模块介绍

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块。

创新互联主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、营销型网站建设、网站程序开发、HTML5响应式成都网站建设成都做手机网站、微商城、网站托管及网页维护、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为成都混凝土搅拌机行业客户提供了网站推广服务。

2.使用模块的好处:

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数。

3.模块分类

模块分为三种:
(1).自定义模块
(2).内置标准模块(又称标准库)
(3).开源模块

4.模块导入

(1)import xxx
直接导入模块.
导入时执行的动作:
产生一个新的名称空间;
在新建的名称空间里面执行模块(.py)的内容;
拿到模块名,执行模块文件产生的名称空间。

(2)import xxx as yyy
导入模块并重新赋予一个名字(不会改变模块本身的名字)

(3)from ... import xxx
从一个模块里导入函数、变量、装饰器等......
from ... import
将某个模块的所有内容导入。
代表所有。
用这种格式导入的时候iu,可以在模块中添加代码:

__all__ = [这里写允许从这个模块导入的内容]

例如:

import time
a = 100
def runTime(fun):
    def wrapper():
        start_time = time.time()
        fun()
        end_time = time.time()
        print('%.8f' %(end_time-start_time))
    return wrapper

def hello():
    print("hello hello")

#__all__用来控制from xxx import *导入的内容,此处表示只允许导入装饰器rumTime和变量a,而方法hello则不会被导入。
__all__ = ['runTime','a']

hello()

from ... import xxx as yyy
导入内容并重新命名。

5.常用内置模块

1.time模块
https://www.cnblogs.com/tkqasn/p/6001134.html

2.random模块
https://blog.csdn.net/zheng_lan_fang/article/details/76684761

3.math模块
https://blog.csdn.net/qq_38092017/article/details/76216137

4.string模块
https://blog.csdn.net/github_36601823/article/details/77815013

5.os模块
https://www.cnblogs.com/ginvip/p/6439679.html

6.sys模块
https://baijiahao.baidu.com/s?id=1594972087849221139&wfr=spider&for=pc

6.模块导入时查找顺序

在导入模块时,模块在python中的查找顺序为:

内存中已经加载的模块-->内置模块-->sys.path目录里面的模块
  • 内存中已经加载的模块:pythonj解释器在启动时默认自动加载的模块,可以通过sys.modules查看,sys.modules是一个字典,由模块名和模块信息构成键值对。
  • sys.path记录了导入模块的搜索路径,按照路径的先后顺序去搜索。
    注意:自定义模块时,模块名字不要和内置模块冲突,否则导入的是自定义模块,无法导入系统内置模块。

7.解决问题

1.在导入模块时,模块中的执行结果会和当前.py文件中执行结果一起显示。
例如:
有一个myRunTime模块如下:

import time
a = 100
def runTime(fun):
    def wrapper():
        start_time = time.time()
        fun()
        end_time = time.time()
        print('%.8f' %(end_time-start_time))
    return wrapper

def hello():
    print("hello hello")

hello()

将模块导入:

import time
import myRunTime

@myRunTime.runTime
def new_hello():
    time.sleep(2)
    print('new hello')

new_hello()

运行会发现,模块中的内容也显示了出来。
Python学习—模块与包

解决办法:
在模块中添加一行代码:

import time
import myRunTime
a = 100
def runTime(fun):
    def wrapper():
        start_time = time.time()
        fun()
        end_time = time.time()
        print('%.8f' %(end_time-start_time))
    return wrapper

def hello():
    print("hello hello")
if __name__ == "__main__":     #这是添加的代码。判断这个文件是否被作为模块导入。否,则执行if下的语句。是,则不执行。
    hello()

现在运行就不会有模块中的执行结果了。
Python学习—模块与包

__name__所在文件没有被当作模块导入,其值为__main__
__name__所在文件没被当作模块导入,其值为模块的名称

8.第三方模块导入

(主机要能联网)
1.在shell环境中用pip3安装。

pip3 install 模块名

2.在pycharm中安装

按ctrl+alt+s键进入模块管理界面,点击模块列表右边的"+"号按钮,进入搜索模块页面搜索选择模块然后安装。

1.包的含义

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。

如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。

就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。

举个例子:
一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:
Python学习—模块与包

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。

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

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:
Python学习—模块与包

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utils和mycompany.web.utils。

mycompany.web也是一个模块,因为该目录下有一个init.py的文件。

文章参考:廖雪峰python教程

如果对包还有一些疑惑,可以参考:菜鸟教程python3-模块与包

分享名称:Python学习—模块与包
本文链接:https://www.cdcxhl.com/article34/jjjjpe.html

成都网站建设公司_创新互联,为您提供小程序开发做网站定制网站网页设计公司网站排名微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设