• python 模块和包


    模块和包:

      1.如何自己写一个模块

      import 模块名
      模块的导入相当于这个模块所在的文件,模块的多次导入不会重复执行
      命名空间
       为模块起别名 as 语句
       一行导入多个模块 : 内置 第三方 自定义
      from import
       命名空间 名字引用模块中的名字
       为导入的名字起别名
       一行导入多个名字
       *和__all__的关系 : __all__只能约束*

      
      示例文件:自定义模块my_module.py,文件名my_module.py,模块名my_module
      
    #my_module.py
    print('from the my_module.py')
    
    money=1000
    
    def read1():
        print('my_module->read1->money',money)
    
    def read2():
        print('my_module->read2 calling read1')
        read1()
    
    def change():
        global money
        money=0

      模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下 

    #demo.py
    import my_module #只在第一次导入时才执行my_module.py内代码,此处的显式效果是只打印一次
              #'from the my_module.py',当然其他的顶级代码也都被执行了,只不过没有显示效果.
    import my_module import my_module import my_module ''' 执行结果: from the my_module.py '''



      模块引用中的情况 :
       1.模块的循环引用 ***
       模块之间不允许循环引用
       2.模块的加载与修改 *
       已经被导入的模块发生了修改,是不会被感知到的
       要想修改的模块被正在运行中的程序感知到,重启这个程序
       3.把模块当成脚本执行 *****
       if __name__ == '__main__':
       代码
       写在这里面的代码只有这个文件被当做脚本执行的时候才执行
       4.模块的搜索路径 *****
       和被当做脚本执行的文件 同目录下的模块,可以被直接导入
       除此之外其他路径下的模块 在被导入的时候需要自己修改sys.path列表

    包:
      包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

    1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

    2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

    3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

    强调:

      1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

      2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块

    从包中导入模块:

      

    import
    import glance.api.policy
    glance.api.policy.get()
    
    import glance.api.policy as policy
    policy.get()
    
    from import
    from glance.api import policy
    policy.get()
    
    from glance.api.policy import get
    get()
  • 相关阅读:
    怎样把Maven项目共享为传统Web项目
    伸冤人
    Maven依赖
    Maven常用插件参数
    Maven默认周期与插件
    MySQL Connector_J_5.1.34_2014.10
    MyEclipse2015对Javascript自动提示的终极支持
    Struts Convention Plugin 流程 (2.1.6+)
    Maven,预加载资源文件
    Myeclipse2014 自带的报表功能 与 Eclipse BIRT
  • 原文地址:https://www.cnblogs.com/zbw582922417/p/9525644.html
Copyright © 2020-2023  润新知