zoukankan      html  css  js  c++  java
  • 初识模块

    模块的定义

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

    常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。

    在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 

    1 使用python编写的.py文件

    2 已被编译为共享库或DLL的C或C++扩展

    3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

    4 使用C编写并链接到python解释器的内置模块

    ps:如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

    使用模块

    import 导入模块

    import spam

    模块举例:

    #spam.py
    print('from the spam.py')
    
     
    
    money=1000
    
     
    
    def read1():
    print('spam模块:',money)
    
     
    
    def read2():
    print('spam模块')
    read1()
    
     
    
    def change():
    global money
    money=0
    

      

    结合笔记阅读

    首次导入模块发生的三件事

    1.创建一个模块的名称空间

    2.执行模块对应文件,将产生的名字存放于1中的名称空间

    3.在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀

    #模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下 
    
    #test.py
    import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次'from the spam.py',当然其他的顶级代码也都被执行了,只不过没有显示效果.
    import spam
    import spam
    import spam
    
    '''
    执行结果:
    from the spam.py
    '''
    

      

    模块起别名

    import spam as sm 

    print(sm.money)

    sm.read1( )

    在一行导入多个模块(不推荐使用)

    import spam,mysql,oracle

    推荐写成多行

    import spam

    import mysql

    import orade

    from...import...的使用

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

    #大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

    可以使用__all__来控制*(用来发布新版本),在spam.py中新增一行

    __all__=['money','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

    py文件的两种用途

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

      

    模块查找路径

    1.内存中已经加载的模块

    2.内置模块

    3.sys.path路径中包含的模块

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

      

  • 相关阅读:
    Qt5官方demo解析集21——Extending QML
    多封装,少开放。强烈建议C++标准添加class之间的注入机制
    iOS 设计模式之工厂模式
    golang的select典型用法
    Go的异常处理 defer, panic, recover
    Visual Studio Code 的简单试用体验
    在Visual Studio Code中配置GO开发环境
    Go语言开发环境配置
    Go 语言 很牛
    Go将统治下一个10年?Go语言发展现状分析
  • 原文地址:https://www.cnblogs.com/taostaryu/p/8708769.html
Copyright © 2011-2022 走看看