• Python之旅.第四章.模块与包


    一、模块的使用之import

    1 什么是模块?
    模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module

    2 使用模块

    2.1 import 导入模块
    首次导入模块发生三件事
    1、创建一个模块的名称空间
    2、执行模块对应文件,将产生的名字存放于1中的名称空间
    3、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间

    import spam
    强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件

    import spam
    import spam
    import spam
    import spam
    import spam #以上导入的是第一次导入的结果

    print(spam)


    模块中功能的执行始终以模块自己的名称空间为准
    read1=111111
    print(spam.read1)#调用了spam模块中read1函数,输出的是spam模块中的read1
    money=1111111111111111
    spam.change() #调用了spam模块中change函数,函数功能修改money的值,最最后修改的还是spam模块中的值,跟执行文件中的money无关
    print(money)
    spam.read1()

    3、为模块起别名
    import spam as sm #将模块名spam改为sm,调用spam模块中的功能,用sm调用就可以了,主要用于某些模块名过长,改为简写,更方便调用
    print(sm.money)
    sm.read1()

    engine=input('>>: ').strip() #根据输入判断要用什么模块,模块名都改为相同的
    if engine == 'mysql':
    import mysql as db
    elif engine == 'oracle':
    import oracle as db
    db.parse() #调用时根据输入的模块名来执行


    4、一行导入多个模块(不推荐使用)
    import spam,mysql,oracle

    推荐写成多行
    import spam
    import mysql
    import orcacle

    二、模块的使用之from...import...

    首次导入模块发生三件事
    1、创建一个模块的名称空间
    2、执行模块对应文件,将产生的名字存放于1中的名称空间
    提示:from 。。。 import。。与import前两件事一模一样
    3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀

    import spam # spam.名字 #调用功能方法:模块名.功能名

    from spam import money,read1,read2,change #用drom。。。import。。。调用模块,提前把功能名写出来,这样调用所需要的功能时就不需要写名字了
    print(money)
    read1()
    read2()
    change()
    ————————————————————————————————————————————————————————————————
    import spam
    print(money)

    注意:
    1、同import,执行模块中的功能,始终以模块的名称空间为准
    money=1111111111
    spam.change() #调用spam模块中的change功能,把money的值替换为0
    print(money) #输出发现money的值为111111111111,也就是说,模块功能中改变的也只是模块中money的值
    ————————————————————————————————————————————————————————————————
    2、from ... import 名字,拿到的名字可以不加前缀直接使用,使用起来更加方便
    当问题是容易与当前执行文件中相同的名字冲突
    money=1111111111111111
    print(money)#先从当前开始找money,在当前找到了就执行当前的money,没有找到再去模块中找,所有,不要把变量名定义与模块中的功能相同
    read1=1111111
    read1()
    ————————————————————————————————————————————————
    #如果功能太多的话,一个个写不太现实,一般就用*代替所有功能
    #注意,因为有些功能有用,有些功能不常用,所有模块设计者就用__all__把常用的功能放入其中,*也就只能调用常用的功能了
    __all__=['money','read1'] # from .. import *
    from ... import *
    from spam import * #调用spam模块内所有可以被*调用的功能

    print(money)
    print(read1)
    print(read2)
    print(change)

    三、模块的搜索路径

    import m1
    m1.f1()
    模块的查找顺序是:
    1、内存中已经加载的模块
    2、内置模块
    3、sys.path路径中包含的模块
    import time #调用模块time

    import m1 #调用ml
    m1.f1()

    time.sleep(15) #用15秒时间删除ml,试试下面的ml还能不能用
    import m1 #还可以使用,因为第一次调用模块ml就已经存在内存中了,只要程序不结束,内存中的模块ml就不会清空,可以一直调用
    m1.f1()


    import sys
    print('time' in sys.modules)#sys.module被导入的包 #结果为False,因为还没有导入time模块
    import time
    time.sleep(2)
    print('time' in sys.modules)#结果为True,因为上面导入了time模块
    import sys 
    sys.path.append(r'D:codeSH_fullstack_s1day14dir1')#将文件地址加入sys.path中
    import m1
    m1.f1()


    强调强调强调强调强调强调强调强调强调强调强调强调
    sys.path的第一个路径是当前执行文件所在的文件夹
  • 相关阅读:
    NOIP2016——组合数问题
    BZOJ3450——Tyvj1952(OSU?)
    洛谷4316——绿豆蛙的归宿(期望)
    BZOJ1997——次小生成树(严格次小生成树)
    USACO2002-OPEN-GREEN(GREEN秘密的牛奶管道SECRET)
    Linux系统应急响应
    Linux系统登录相关
    (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告
    HTTP参数污染(HPP)漏洞
    逻辑漏洞之越权访问漏洞
  • 原文地址:https://www.cnblogs.com/yangli0504/p/8708625.html
Copyright © 2020-2023  润新知