zoukankan      html  css  js  c++  java
  • 第十三章 模块和包

    1.模块                                                      

    1.模块就是import可以导入直接使用的py文件

    一个模块如果执行多次import是什么效果:只执行一次

    凡是导入一个模块就相当于执行了这个文件,当你导入一个模块就可以使用模块中的名字

    mymodule.py
    print('执行了mymodule')
    
    import mymodule
    # 执行了mymodule

    当你导入了一个模块那么在导入这个模块所处的命名空间中,就有了一个名字,指向属于自己的空间,模块中的代码从上至下依次执行,可以通过模块访问模块中的名字,不能脱离模块引用模块中的名字

    mymodule.py
    print('执行了mymodule')
    money = 1000
    
    def func():
        print('My moneny is %s' % money)
    
    import mymodule
    mymodule.func()
    
    # 执行了mymodule
    # My moneny is 1000
    
    func()
    #     func()
    # NameError: name 'func' is not defined

    当模块和当前文件中都有相同的名字,模块中的方法引用模块中的名字

    mymodule.py
    print('执行了mymodule')
    money = 1000
    
    def func():
        print('My moneny is %s' % money)
    
    import mymodule
    
    money = 2000
    mymodule.func()
    
    # 执行了mymodule
    # My moneny is 1000
    # 说明:模块并没有导入执行文件,所以模块中的方法引用不到执行文件中的名字

    2.import .. as ..使用别名

    mymodule.py
    print('执行了mymodule')
    money = 1000
    
    def func():
        print('My moneny is %s' % money)
    
    import mymodule as mm
    mm.func() # --> 使用别名
    
    # 执行了mymodule
    # My moneny is 1000

    3.import..from

    mymodule.py
    print('执行了mymodule')
    money = 1000
    
    def func():
        print('My moneny is %s' % money)
    
    from mymodule import func
    func()
    def func():
        print(123)
    func()
    # 执行了mymodule
    # My moneny is 1000
    # 123
    
    # 说明:因为导入mymodule中的func,所以第一个func(),为mymodule中的方法,输出结果为'My moneny is 1000'
    # 而第二个func()是因为程序中重新定义了func,所以直接执行程序中的func()函数
    # 即使程序使用from..import的形式,也会在内存里开辟相应的命名空间,将模块中的所有名字存在内存里
    # 所有这样也不会减少使用内存,只不过引用是不可视的

    4.import..from..as..使用别名

    mymodule.py
    print('执行了mymodule')
    money = 1000
    
    def func():
        print('My moneny is %s' % money)
    
    from mymodule import func as f, money as m
    f()
    print(m)
    
    # 执行了mymodule
    # My moneny is 1000
    # 1000

    5.import和from..import的区别与联系

    import
    import一个模块 就相当于执行了这个模块
    那么在全局,就有了一个模块名字,指向属于自己的空间
    空间里存储了所有文件中的名字
    起别名import ... as ...
    
    from import
    仍然会执行整个文件
    文件中的名字会被存储在一块独立的内存空间
    import后面的名字会出现在全局,相当于对独立命名空间中的一个引用
    from import 也支持as语句 也支持 导入多个名字
    from import * 相当于导入所有名字,*和被导入模块__all__是互相影响的

    6.模块的导入顺序

    导入模块要放到文件开始

    内置模块 -- 扩展模块 -- 自定义模块

    2.包                                                        

    1.包是什么

    包就是一个由一组py文件组成而且包含一个__init__.py文件的文件夹

    __init__.py文件的作用

    2.从包中导入一个模块,可以使用.描述文件夹之间的关系

    3.使用import..as..别名的方式导入包中的模块

    4.使用from..import..

    5.在包中导入一个模块要从包名开始精确到一个模块结束

    绝对导入 -- 不利于代码迁移

    相对导入 -- 从包的外部导入包的内部的关系,相对导入才生效

                      带有相对导入路径的文件不能直接执行 -- 会报错

    6.__init__.py的作用

    导入一个文件相当于执行了这个文件中的代码

    但是导入一个包相当于执行这个包中的init文件

    import后面的这个名字 永远会出现在全局的名命空间里

    参考:http://www.cnblogs.com/Eva-J/articles/7292109.html

  • 相关阅读:
    Android Activity中获取当前焦点的控件,自动化输入EditText
    Java Android 二进制文件读写
    Delphi 动态数组、静态数组、TBytes 的区别
    IIS日志分析工具-Log Parser
    信息安全等级保护三级系统基线要求判分标准之应用安全
    通过TCPView工具查看foxmail用exchange方式连接exchange时用什么端口
    Windows2008R2操作系统日志清理
    批量IP自动netcat脚本
    批量IP自动ping脚本
    批量移动AD用户到指定OU
  • 原文地址:https://www.cnblogs.com/gongniue/p/9152273.html
Copyright © 2011-2022 走看看