zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/2222bai/p/11593226.html
Copyright © 2011-2022 走看看