• Day 15 python模块/模块导入


    模块的四种形式

    自定义模块

    自定义一个.py文件,文件内都是自己写的函数,则称为自定义模块,可以导入并调用

    第三方模块

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

    内置模块

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

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

    import和from...import

    一般使用import或者from...import导入模块

    import time
    
    time.time()
    

    模块的重复导入会直接饮用之前创造好的结果,不会重复执行模块的文件,即重复导入会发生:spam=spam=模块名称空间的内存地址

    from time import time
    
    time()
    

    使用import module时,module本身被引入,但是保存它原有的命名空间,所以我们需要使用module.name这种方式访问它的 函数和变量。
    from module import这种方式,是将其它模块的函数或者变量引到当前的命名空间中,所以就不需要使用module.name这种方式访问其它的模块的方法了。

    循环导入问题

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

    运行m1,会发生报错:ImportError: cannot import name 'x'

    解决方法一:

    将定义变量放到导入模块之前

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

    解决方法二:

    将导入模块放到函数定义中

    # m1.py
    x = 10
    def func1():
    	form m2 import y
    	print('m1:',x, y)
    
    func1()
    
    # m2.py
    y = 20
    def func2():
    	form m1 import x
    	print('m2:',x, y)
        
    func2()
    

    模块搜索路径的顺序

    1. 先从内存中已经导入的模块寻找
    2. 内置的模块中
    3. 环境变量sys.path中寻找

    强调:sys.path的第一个值是当前执行文件的所在的文件夹

    python文件的两种用途

    python文件总共有两种用途,一种是执行文件;另一种是被当做模块导入。

    编写好的一个python文件可以有两种用途:

    1. 脚本,一个文件就是整个程序,用来被执行
    2. 模块,文件中存放着一堆功能,用来被导入
    # m1.py
    def f1():
        print('m1')
        
    f1()
    
    # run.py
    import m1
    

    如果直接运行run.py,则会直接运行m1.py中的f1()

    如果我们要防止这种事情发生,可以在m1.py文件中的f1()加上条件__name__ = '__main__',这样在运行run.py文件的时候就不会运行f1()了

    如果是放在被调用文件,可以用来测试,如果放在启动文件中,则是用来防止启动文件被调用

    # m1.py
    def f1():
        print('m1')
        
    if __name__ = '__main__':
    	f1()
    
  • 相关阅读:
    Apache ActiveMQ消息中间件的基本使用
    struts2结合生成验证码
    Python中docstring文档的写法
    Nginx+uWSGI+Django原理
    Python垃圾回收机制详解
    Python数据库连接池实例——PooledDB
    构建高可用服务端
    Python使用multiprocessing实现一个最简单的分布式作业调度系统
    python3 分布式进程(跨机器)BaseManager(multiprocessing.managers)
    python BaseManager分布式学习
  • 原文地址:https://www.cnblogs.com/2222bai/p/11593226.html
Copyright © 2020-2023  润新知