• python 模块学习


    为什么要有模块

    面条版代码-->函数版代码-->文件版代码(模块)-->文件夹版(包)
    代码会变得更加简洁,清晰,模块化
    一个模块里会有多个函数,相当于一个大功能分成多个小功能
    1.自定义模块
    2.第三方模块,如requests
    3.内置模块,如time
    4.包(文件夹)

    import 与from...import...

    #test.py
    
    import time
    
    1.打开time文件
    2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
    3.test.py中会有一个time变量指向time模块的名称空间,如果导入方式为'import time as t',
    则就是变量指向time模块的名称空间
    
    from time import sleep
    
    1.打开time文件
    2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
    3.test.py中会有一个sleep变量指向time模块名称空间的sleep,如果导入方式为'from time import sleep,local time',则是由一个sleep变量和一个localtime变量指向time模块名称空间中的sleep和localtime
    

    循环导入问题

    # m1.py
    from m2 import y
    x = 10
    
    # m2.py
    from m1 import x
    y = 20
    
    

    为什么会有循环导入问题

    1.m1文件需要导入m2文件中的y

    2.m2文件需要导入m1文件的x

    3.代码自上而下运行,m1需要m2的y,然后会去m2的名称空间找到y,但是在找y之前,需要运行m2的代码,m2的代码第一句是去找m1的x,然后又回去运行m1的代码,m1的第一行代码又是去寻找m2的y

    4.就是说m1只能运行第一行,m2也只能运行第一行,所以出现了循环导入问题

    解决方案一

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

    名字的执行顺序:内置(python解释器启动的时候)-->全局(文件执行的时候)-->局部(函数调用得时候)

    模块的搜索路径

    1.去内存中找

    # test.py
    import m1 #从m1.py文件中导入的,然后会生成m1模块的名称空间
    import time
    
    # 删除m1.py文件,m1模块的名称空间仍然存在
    
    time.sleep(10)
    
    import m1 #不报错,一定不是从文件中获取了m1模块,而是从内存中获取的
    
    

    2.去内置模块中找

    # time.py
    print('from time')
    
    #test.py
    import time #无任何打印,所以他先去内置模块中找了
    

    3.环境变量中找

    import sys
    print(sys.path)
    
    # b/a/m1.py
    
    #b/test.py
    import m1 #报错
    
    sys.path.append('b/a')
    import m1
    

    python文件的两种用途

    1.模块文件,被当做模块给导入,有多个

    2.运行文件,被当做执行文件执行,只能有一个

    • 搜索路径以执行文件为基准
    # m1.py
    def f1():
    	print('from f1')
    
    f1()
    
    # test.py
    import m1
    
    m1.f1()  #运行两次
    
    • _name_
    # m1.py
    def f1():
    	print('from f1')
    
    if __name__ == '__main__':  #__name__在m1.py被当做模块导入时是模块名,作为执行文件时是'__main__'
    	f1()
    	
    # test.py
    import m1
    
    m1.f1() # 运行一次
    

    直接运用老师的总结,对于后期回顾知识点非常好

  • 相关阅读:
    iOS开发日记1-tableview编辑
    nginx安装-del
    linux服务器su之后变成bash-4.1#
    PhoneGap & HTML5 学习资料网址
    PhoneGap通信机制的实现原理
    Android调用Java WebSevice篇之二
    Android调用Java WebSevice篇之一
    Java开发牛人十大必备网站
    百度地图生产工具
    PS制作圆角透明图片
  • 原文地址:https://www.cnblogs.com/geyatou322/p/10981455.html
Copyright © 2020-2023  润新知