zoukankan      html  css  js  c++  java
  • 模块

    一、几种导入模块的方式

     1、import语句

    1、import语句的简单使用

    test.py

    print("from the test.py of start")
    
    num = 100
    
    def speak():
        print("form the test.py of speak")
    
    print("from the test.py of end")

     work.py

    import test
    
    import test  #一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
    import test
    import test

    执行结果

    from the test.py of start
    from the test.py of end

    2、在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果

    1. 为源文件(test模块)创建新的名称空间,在test中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
    2. 在新创建的命名空间中执行模块中包含的代码
    3. 创建名字spam来引用该命名空间

    3、被导入模块有独立的名称空间

    import test
    
    num = 10
    
    print(test.num)

    执行结果

    from the test.py of start
    from the test.py of end
    100

    4、为模块名起别名

    import test as tt
    
    print(tt.num)

    5、在一行导入多个模块

    import sys,re,os

    2、from ... import...语句

    1、for...import...的简单使用

    from test import num

    2、from...import 与import的对比

    唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.
    
    #from...import...的方式有好处也有坏处
        好处:使用起来方便了
        坏处:容易与当前执行文件中的名字冲突
    #如果当前有重名read1或者read2,那么会有覆盖效果

    3、也支持as

    from test import num as nums

    4、一行导入多个名字

    from test import num, speak

    5、from...import *

    from test import *
    # 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置
    #不建议使用

    6、模块循环导入问题

    待定

    3、不同目录结构下的模块导入

    1、同级目录

    – src
     | – mod1.py
     | – test.py

    test.py可以直接调用mod1模块

    import mod1
    或
    from mod1 import *

    from mod1 import x,p

    2、调用子

    – src 
     | – mod1.py 
     | – lib 
     |  | – mod2.py 
     | – test1.py

    如果想在程序test1.py中导入模块mod2.py

    
    
    from lib import mod2

    from lib.mod2 import x,pt

    from
    lib.mod2 import *import lib.mod2  (lib.mod2.x),加前缀

    3. 调用上级目录下的文件

    – src 
     | – mod1.py 
     | – lib 
     | | – mod2.py 
     | – sub 
     | |– test.py

    先看路径是否在sys.path中,不是则添加路径,在按一、二步进行导入

    二、模块与脚本

    #编写好的一个python文件可以有两种用途:
        一:脚本,一个文件就是整个程序,用来被执行
        二:模块,文件中存放着一堆功能,用来被导入使用
    #python为我们内置了全局变量__name__, 当文件被当做脚本执行时:__name__ 等于'__main__' 当文件被当做模块导入时:__name__等于模块名 #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑 if __name__ == '__main__':

    三、模块的搜索路径

    1、模块的搜索路径:内存中已加载->内置模块->sys.path中包含的路径

    #官网链接:https://docs.python.org/3/tutorial/modules.html#the-module-search-path
    搜索路径:
    当一个命名为spam的模块被导入时
        解释器首先会从内建模块中寻找该名字
        找不到,则去sys.path中找该名字
    
    sys.path从以下位置初始化
    执行文件所在的当前目录
    PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样)
    依赖安装时默认指定的
    
    注意:在支持软连接的文件系统中,执行脚本所在的目录是在软连接之后被计算的,换句话说,包含软连接的目录不会被添加到模块的搜索路径中
    
    在初始化后,我们也可以在python程序中修改sys.path,执行文件所在的路径默认是sys.path的第一个目录,在所有标准库路径的前面。
    这意味着,当前目录是优先于标准库目录的,需要强调的是:我们自定义的模块名不要跟python标准库的模块名重复,除非你是故意的,傻叉。

    2、路径的查看与增加

    1、使用模块sys.path可以查看路径

    import sys
    
    print(sys.path)

    执行结果

    D:PYprojectTest  #当前文件路径
    D:PYproject
    
    D:PyCharm 2019.1.3helperspycharm_display
    D:Python3.7.3python37.zip
    D:Python3.7.3DLLs
    D:Python3.7.3lib
    D:Python3.7.3
    D:PYprojectvenv
    D:PYprojectvenvlibsite-packages
    D:PYprojectvenvlibsite-packagessetuptools-40.8.0-py3.7.egg
    D:PYprojectvenvlibsite-packagespip-19.0.3-py3.7.egg
    D:PyCharm 2019.1.3helperspycharm_matplotlib_backend

    2、增加路径

    1. 修改环境变量
    2. 在site-packages路径下添加一个路径配置文件,文件的扩展名为.pth,内容为要添加的路径即可
    3. 使用sys.path.append("路径")
    4. 利用os.path获取相对路径,在通过sys模块进行添加

    四、动态导入模块

     1、__import__()

    s = __import__("sys")
    print(s)  #使用时用s,相当于执行了as操作
    print(s.path)

    2、无论嵌套了多少层,只导入第一层

    s = __import__("test1.test2.test3")
    print(s)
    执行结果
    <module ‘test1’ (namespace)>

    3、使用模块importlib

    import importlib
    
    m = importlib.import_module("test1.pt")
    print(m)

    可以导入多层

    本文参考:https://www.cnblogs.com/linhaifeng/articles/6379069.html

  • 相关阅读:
    shell脚本编写实例
    正则表达式文本过滤
    bootstrap实现嵌套列
    当鼠标悬停在链接上,或者点击过的链接,颜色会被设置为 #2a6496。同时,会呈现一条下划线。点击过的链接,会呈现一个颜色码为 #333 的细的虚线轮廓。另一条规则是设置轮廓为 5 像素宽,且对于基于 webkit 浏览器有一个 -webkit-focus-ring-color 的浏览器扩展。轮廓偏移设置为 -2 像素
    bootstrap页面效果图
    bootstrap实现菜单定位
    bootstrap三列布局
    bootstrap图片切换效果
    bootstrap导航菜单
    首字下沉
  • 原文地址:https://www.cnblogs.com/lilong74/p/11367773.html
Copyright © 2011-2022 走看看