zoukankan      html  css  js  c++  java
  • 第十五天:模块

    模块的四种形式

    模块

    就是从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名是test.py的话,它的对应模块名就是test)

    用来从逻辑上组件模块,本质就是一个目录(必须带有一个__init__.py文件)

    导入模块

    本质就是把python文件解释一遍

    导入包

    本质就是执行该报下的__init__.py文件;如果要导入包下面的模块:需要先导入包,然后从包下的__init__.py文件中再导入该包下的模块

    python可以看成是手机–>pip看成应用管家-->模块就是应用软件

    1.系统自带软件--》不需要安装

    2.需要下载的软件

    3.自定义软件

    1.python内置模块:python解释器启动自带的time/random/os/sys
    2.pip安装的模块,pip install jieba
    3.自定义模块--》自定义代码
    4.包(模块)-》未来详细讲

    import与from..import..

    import

    以time为例:
    import time

    1.开辟内存空间,内存空间命名为time
    2.把time.py中所有代码读入空间,然后运行
    3.通过time.方法名使用time模块中的方法

    #test.py
    
    import time
    
    import time as t  #变量名t指向time模块的名称空间
    
    from time import sleep
    from time import sleep,localtime
    

    优点:永不冲突
    缺点:每次导入多输入几个字符,非常麻烦

    from...import...

    以time里的sleep为例

    from time import sleep

    1.开辟内存空间,内存空间命名为time
    2.把time.py中所有代码读入空间,然后运行
    3.把sleep()方法读入import和from import,因此可以直接使用方法名

    # *__all__=['']
    #test.py
    
    __all__ = ['f1','f2']
    
    def f1():
        print(1)
    def f2():
        print(2)
    def f3():
        print(3)
    
    from test import *
        test.f3()    #无法运行
    
    import test
        test.f3()   # 3
    

    优点:少打几个字符
    缺点:容易冲突

    循环导入

    #m1.py
    from m2 import y
    x = 10
    print('m1:',x,y)
    
    #m2.py
    from m1 import x
    y = 20
    print('m2:',x,y)
    

    过程:m1.py --> m2.py --> m1.py ...

    结果:x/y在这个过程中一直没有生成

    解决方案一

    #m1.py
    x = 10
    from m2 import y
    print('m1:',x,y)
    
    #m2.py
    y = 20
    from m1 import x
    print('m2:',x,y)
    
    
    # m2: 10 20
    # m1: 10 20
    # m2: 10 20
    
    

    过程:m1.py -->10 20 --> m2.py -->10 20--> m1.py --> x = 10 20

    解决方案二

    # m1.py
    def f1():
        from m2 import y
        print(y)
    x = 10
    
    # m2.py
    def f1():
        from m1 import x
    y = 20 
    
    # y = 20
    

    过程:f1() --> m2.py --> y = 20

    4.模块的搜索路径

    1. 先从内存中寻找

      from m2 import y
      print(y)
      import time
      time.sleep(10)  # 10s内删除了m2
      
      
      from m2 import y
      print(y)
      
    2. 再从内置中寻找

      from time import time
      print(time)
      
    3. 然后从自定制寻找

      x = 10
      
    4. 最后从环境变量中寻找

    Python文件的两种用途

    作为模块文件,模块可以有多个

    作为执行文件,执行文件只有一个

    # m1.py
    x = 10
    if __name__ == '__main__':
    print(x)
    # m2.py
    import m1
    

    if __name__ == '__main__':这段代码在pycharm里面只需要打一个main然后tab即可打出来,不需要一个字一个字打

    当运行m1时__name__ == '__main__'所以会输出x

    运行m2时__name__ != '__main__'(if条件不成立)会报错

  • 相关阅读:
    Linux下安装Flume
    [译]MIT6.824_1.1分布式系统介绍——驱动力与挑战
    MySQL-Canal-Kafka数据复制详解
    Linux下搭建Kafka集群
    我在创业公司的云原生之旅
    使用go向es进行数据操作脚本
    kubectl exec 向pod的文件中增加内容
    kubernetes资源导出小脚本
    面试题(四) -- 第一次当面试官
    gitlab备份检查小脚本
  • 原文地址:https://www.cnblogs.com/lyyblog0715/p/11593926.html
Copyright © 2011-2022 走看看