ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模块1

2021-07-22 15:32:38  阅读:134  来源: 互联网

标签:导入 m1 模块 m2 import foo


内容概要

  • 互相导入模块
  • 一个python文件有几种用途
  • 模块功能
  • 模块搜索路径的优先级

内容详细

  • 互相导入模块

    m1.py

    # print('正在导入m1')
    # x = 'm1'
    # from m2 import y
    # 三件事,造一个m2的名称空间
         #        开始运行m2
         #        产生y这个名字去指向m2中的y的内存地址
    
    # x = 'm1'
    
    # 方式二:
    import sys
    
    print('正在导入m1')
    def f1():
        from m2 import y
        print(y)
    x = 'm1'
    
    
    

    m2.py

    # 方式一:
    # print('正在导入m2')
    # y = 'm2'
    # from m1 import x
    #      # 三件事,造一个m1的名称空间
    #      #        开始运行m1
    #      #        产生x这个名字去指向m1中的x的内存地址
    # # y = 'm2' # 将这里的y='m2'往上提到from m1 import x之上才有用,不然再这个位置报错
    
    
    
    # 方式二:
    print('正在导入m2')
    def f2():
        from m1 import x
        print(x)
    y = 'm2'
    
    

    run.py

    import m1
    
    # 第二种方式
    m1.f1()
    # 运行结果:
    # 正在导入m1
    # 正在导入m2
    # m2
    
  • 一个python文件有几种用途

    # 一个python文件有两种用途
    # 1.被当作程序运行
    # 2.被当作模块导入
    
  • 模块功能

    '''
    一、模块的介绍
    模块就是一系列功能的集合体,分为三大类
        1.内置的模块
        2.第三方的模块
        3.自定义的模块
            一个python文件本身就是一个模块,文件名 m.py ,模块名 m
                ps:模块分为四种模式
                    1.使用python编写的.py文件
                    2.把一系列模块组织到一起的文件夹(注:文件夹下有一个_init_.py文件,该文件夹称之为包)
                    3.已编译为共享库或DLL的C或C++扩展
                    4.使用C编写并链接到python解释器的内置模块
    
    二、为何要用模块
        1.内置与第三方的模块拿来就用,无需定义,这种拿来主义,可以极大的提升自己的开发效率
        2.自定义的模块
            可以将程序的部分功能提取出来放到一个模块中为大家共享使用
            好处是介绍了代码冗余,程序组织结构更加清晰
    
    三、如何用模块
    '''
    '''
    foo.py文件的内容:
    x=1
    def get():
        print(x)
    def change():
        global x
        x=0
    '''
    
    
    # 一、如何用模块
    # import ...
    # 1.首次模块导入会做三件事:
    #   1、执行源文件代码
    #   2、产生一个新的名称空间用于存放源文件执行过程中产生的名字
    #   3、在当前执行文件所在的名称空间中得到一个名字foo,该名字指向新创建的模块名称空间,
    #    若要引用模块名称空间中的名字,需要加上该前缀
    
    # 需要强调一点是,第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,
    # 不会重复执行文件,通过import sys,打印sys.modules的值可以看到内存中已经加载的模块名。
    # import sys
    # print(sys.modules)
    # # 'foo': <module 'foo' from 'D:\\Users\\ycc\\PycharmProjects\\pythonProject\\day 13\\foo.py'>}
    
    
    # 2.引用
    # 强调一:
    # 加上foo.作为前缀就相当于指名道姓地说明要引用foo名称空间中的名字,
    # 所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,
    # 执行foo.get()或foo.change()
    
    # 强调二:无论是查看还是修改都是以原模块为基准的,与调用位置无关
    # 例:
    # x = 100
    # import foo
    # foo.x  # 这里虽然定义了变量x,但是foo.x 输出结果仍为 1
    # foo.get()
    # foo.change()
    
    # 二:导入模块的模式与规范
    # 模式
        # 1.可以improt语句导入多个模块(推荐使用)
        # import a
        # import b
        # ...
    
        # 2.在一行导入,用逗号分隔开不同的模块(不推荐)
        # import a,b,c,...
    # 规范(按以下顺序导入模块,虽然不按顺序也不会报错,但是算是自发的规定)
        # 1.内置模块
        # 2.第三方模块
        # 3.自定义模块
    
    # 其他导入语法
    # import foo as f  # 注:这里as f后不要加冒号
    # # 这里相当于把foo换个名字,因为可能会遇到名字特别长的模块名,为了调用时方便,可这样操作
    # f.x  # 等价与foo.x
    # f.get()
    # f.change()
    
    # 模块是第一类对象
    
    # 自定义模块的命名应该采用纯小写+下划线的风格(python3中)
    # python2中是驼峰体的风格
    
    # from 模块 import 模块内的功能
    
    from foo import x,get,change #将模块foo中的x和get导入到当前名称空间
    
    a=x #直接使用模块foo中的x赋值给a
    get() #直接执行foo中的get函数
    change() #即便是当前有重名的x,修改的仍然是源文件中的x
    '''
    无需加前缀的好处是使得我们的代码更加简洁,
    坏处则是容易与当前名称空间中的名字冲突,
    如果当前名称空间存在相同的名字,则后定义的名字会覆盖之前定义的名字。
    
    '''
    
    
    
    
    
    
  • 模块搜索路径的优先级

    # 无论是import还是from...import...在导入模块时都涉及到查找问题
    # 优先级:
    # 1.内存(内置空间)
    # 2.硬盘:按照sys.path中存放的文件的顺序依次查找要导入的模块
    
    import sys
    print(sys.path)
    # 值为一个列表,存放了一系列的文件夹
    # 其中第一个文件夹是当前执行文件所在的文件夹
    
    # import foo  # 内存中已经有foo了
    # foo.say()
    #
    # import time     # 在这10秒时间内,将foo.py删掉
    # time.sleep(10)
    #
    # import foo      # 10秒后,仍能调用,说明是从内存中找的
    # foo.say()
    

标签:导入,m1,模块,m2,import,foo
来源: https://www.cnblogs.com/ccTracy2021/p/15044343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有