• 模块


    十八、模块

    模块:分为模块和包的形式。
    
    通过对其它模块的引用,直接使用别的程序定义的变量,方法等,提高编程效率。
    
    当一个文件为第一个运行,__init__ 属性== ‘__main__’ , 我们可以把它叫做主程序,引用其它模块来使程序运行。
    当文件被当做模块导入到其它程序,它的__init__ 属性==’__模块名__’ 
    
    导入模块的顺序:
    内置模块
    第三方模块
    自定义模块:命名为纯小写字母加下划线
    
    一个python文件就是一个模块,模块名就是.py前面的
    
    模块的四种形式:
    py文件
    已被编译成共享库、dll等的c或c++扩展
    把一系列模块组织到一起的文件夹,包,必须有一个__init__.py文件
    用c编写并连接到python解释器的内置模块
    
    导入模块的形式:
    
    1)import 模块
    
    首次导入模块要执行模块代码,产生名称空间,在当前文件中产生名字模块名,指向了模块运行的名称空间,之后的调入,不再执行
    import foo
    foo.x
    import foo1,foo2
    
    import ... as ...
    
    可以在函数内导入模块
    
    
    
    
    
    if __name__ == '__main__':
        pass
    
    当程序是主程序的时候,运行代码
    
    当程序是主程序运行,它的name是'__main__'
    被导入到别的程序时,它的name是'foo',也就是模块名
    
    
    2)from foo import get
    
    不存在foo这个名字
    
    3)from foo import *
    
    导入所有公有变量,方法,
    该调用语句只能在最顶层使用,不能再在其它函数中以这种方式调用包中的变量,方法,
    
    SyntaxError: import * only allowed at module level
    
    但是,from ...import 具体的变量或者方法  的这条语句,就能在函数调用中使用
    
    __all__ = ['变量','方法']
    关于__all__:https://www.jb51.net/article/126875.htm
    在模块中设置这个变量,在导入为*时,只能导入其中的变量和方法
    该列表中所有的元素必须是字符串类型,每个元素对应foo.py中的一个名字
    
    as:可以灵活运用起别名,判断不同的名字的模块一次执行其中一个,将他们都变为
    一个名字,那么调用方式就统一了起来
    
    
    关于导入中的问题:‘史’上雕花
    
    循环导入:两个模块互相导入
    
    解决方案:
    方案一:导入语句放到最后,保证在导入时,所有名字都已经加载过
    方案二:导入语句放到函数中,只有在调用函数时才会执行其内部代码
    
    查找模块的优先级:
    
    先从内存找,内置模块
    然后从sys.path找:
    
    运行文件的所在文件夹(永远不变,不管是终端运行还是pycharm运行),pycharm项
    目的文件夹,第二个当不存在,因为在终端运行就变了,第三个也和pycharm有关,解
    释器的压缩包,解释器文件夹,
    
    sys.path.append(r'...')
    
    定义一个模块的格式:
    
    模块说明
    导入模块
    全局变量
    类
    方法
    If __init__ == ‘__main__’:
    pass
    
    sys模块
    sys.path  # 环境变量
    sys.path.append()  # 添加你想添加的路径
    sys.modules  # 保存添加到程序中的模块,直到程序运行完成,才能释放
    
    Python对模块导入的优化机制,一经导入,即使不再引用,也保存在空间里,直到程序结束,能提高程序的运行效率
    
    类型提示:3.5 及以上
    
    提示函数中形参的类型
    def func(name:'提示信息',age:int = 11,hobbies:tuple)->int:
        pass
    
    .__annotations__  查看提示信息
    
    python 语言:解释型 强类型 动态型
    
    模块的另一种模式:包
    
    包含有__init__文件的文件夹
    python2:
    导入包,运行的是__init__文件,没有__init__就报错了
    python3:没有__init__文件,也不会报错
    
    包内可以有子模块,或子包
    
    导入包,本质上就是执行包内的__init__文件
    所以说,要把包里其他模块import到__init__中
    
    绝对导入,从顶级目录也就是当前文件夹,import,通用的导入方式
    from foo.foo1 import f1
    
    相对导入:.当前文件夹  .. 上层文件夹,不能超出顶级文件夹,推荐相对导入
    from .foo1 import f1
    from a.b.c import f1
    a,b 一定是包,只有最后一级c才允许是模块
    
    相对导入只能用from module import symbol的形式,import ..versions语法是不对的,且symbol只能是一个明确的名字
    from pool import futures.process #语法错误
    from pool.futures import process #语法正确
    
    环境变量是以主程序为准,确定了主程序后,sys.path的值就是确定的以主程序为准的
    所以__init__,导入
    
    os 和 sys 模块:
    
    __file__当前文件的绝对路径
    os.path.dirname()  看文件夹的名字
    sys.path[0] 是绝对文件夹的路径,,,注意path方法的特征
    
    rename覆盖原来的可以
    replace的应用,是否有重复的
    
  • 相关阅读:
    HFish 源码Git下载 源码编译执行
    Windows注册表-学习总结
    利用PHPStudy搭建Xdebug调试环境
    Python3报错Crypto失败(from Crypto.Cipher import AES ModuleNotFoundError: No module named 'Crypto')
    Django后台管理admin字段控制显示长度(字段内容过长,省略号替代)
    PHP代码审计-小题一道
    golang编程-小问题
    迅雷影音播放器-ass字幕乱码-问题
    《独自等待》观影有感
    Python urllib URL 处理模块
  • 原文地址:https://www.cnblogs.com/pythonwl/p/12576680.html
Copyright © 2020-2023  润新知