zoukankan      html  css  js  c++  java
  • 模块

     

    1.模块使用

    1.1 import语句

    使用import,首次导入模块会做三件事:

    1. 执行源文件代码
    2. 产生一个新的名称空间用于存放源文件执行过程中产生的名字
    3. 在当前执行文件所在的名称空间中等到一个名字foo,该名字指向新创建的模块名称空间,若引用模块名称空间中的名字,需要加上该前缀。
    import foo  导入模块foo
    a = foo.x    引用模块中变量x的值赋值给当前名称空间中的名字a
    foo.get()    调用模块foo的get函数
    foo.change()  调用模块foo的change函数
    obj = foo.Foo()  使用模块foo的类Foo来实例化,进一步可以执行obj.func()
    强调:第一次导入模块已经将其加载到内在空间了,之后的重复导入会直接引用内存中已存在的模块。
    

    无论是import 还是from ... import在导入模块时都涉及到查找问题

    优先级:

    1. 内存
    2. 从硬盘找,按照sys.path中的文件所的文件夹
    import sys
    print(sys.path)   从硬盘找,执照syst.path中的文件所在的文件夹
    print(sys.modules)  查看已加载到内存的模块
    

    假如foo这个模块不在同一个文件夹中,可以利用下面的方法导入

    import sys
    sys.path.append('加载的模块地址')
    import foo   现在就可以调用了
    

    2. from -import语句

    from ...import 与import 语句基本一致,唯一不同的是:使用import foo导入模块后,引用模块中的名字
    需要加上foo.作为前缀,而from fo import x,get,change则可以在当前执行文件中直接引用模块foo名字。
    

    3.其他导入语法(as)

    在当前导入的模块起一个别名

    import foo as f
    from foo import get as get_x
    

    4.区分py文件

    if __name__ == '__main__':
    	foo.py 被当做脚本执行时运行的代码
    else:
    	foo.py 被当做模块导入时运行的代码
    

    5.模块搜索路径

    • 模块的查顺序:内存中已经加载的模块>内置模块>sys.path路径中包含的模块

    6.包

    包的本质就是一具文件夹,即包是含有有__init__.py文件的文件夹,所以我们创建包的目的就是为了用文件夹将文件/模块组织起来。

    #1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
    
    #2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
    
    #3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
    
    • 增加当前文件夹包
    import sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    
  • 相关阅读:
    18个Java开源CMS系统一览
    冒泡排序
    数据挖掘十大经典算法
    开源Java CMS建站程序推荐
    Oracle
    Oracle Procedure returning Ref Cursor in Entity Framework 4
    Field_II
    SharePoint Video Library
    ORACLE 导入dmp文件
    System.Diagnostics.Process.Start()。它的作用是调用外部的命令
  • 原文地址:https://www.cnblogs.com/xiaoxuanworking/p/14354968.html
Copyright © 2011-2022 走看看