• 模块和包


    模块

    为什么要有模块

    内置的函数是程序运行的第一时间就加载到内存

    各个内置模块提供的方法都有用,但并不是时刻都可以用上

    因此按照这些所有的方法涉及的方面进行分类

    相同的功能就放在一个模块(就是一个py文件)里  

    就可以把我文件存储到硬盘

    这样当我们不导入这个模块时,这个模块中的内容就不会出现在内存里

    自定义模块

    把不同的功能分到不同的模块  例如选课功能的主文件 :负责用户交互 登录 选择操作

    好处是可以避免代码文件过大,使代码更清晰

    模块的语法

    导入一个模块相当于什么

    相当于执行了这个被导入的文件

    一个模块可不可以多次导入

    可以多次导入,不会报错但只会执行第一次导入的模块的内容

    导入一个模块时内存空间的变化

    1.创建了一个属于这个模块的命名空间

    2.创建一个变量,指向这个命名空间

    3.执行这个文件

    import可以一行导入多个模块,但由于PEP88规范,不推荐使用,推荐逐行导入

    as语法

    import time as t:

      t.time()

    原来的形式为 import time as time  as方式相当于把time重命名为t  ,原来的time名字就失效了

    重命名方法,一般用来做兼容

    mode = 'pickle'
    if mode == 'pickle':
        import pickle as mode
    else:
        import json as mode
    
    def dump():
        mode.dump(obj,f)
    
    def load():
        mode.load(f)

    模块的from import

    from my_module import a,read
    a = 'alex'
    read()

    所有的导入
    不管是import 还是from import
    都是执行完整的那个被导入的文件
    并且所有的文件的导入 都不会破坏模块中本身的命名空间
    如果是import 模块名
        那么是模块名 指向 整个文件的命名空间
    如果是from 模块名 import 变量名
        那么 是在本文件中创建了同名的变量名 指向模块中的变量值

    可以导入多个变量,还可以重命名

    from my_module import a as aa,b as bb,read as r

    不要在文件里起的名字和导入的名字一样

    from my_module import *

    *表示导入所有

    导入的模块中有 __all__['字符串数据类型变量名']

    表示约束* 只能导入列表中含有的变量名

    但__all__只能约束*   没有* all的约束就没用了

    模块的搜索路径

    以后创建的py文件名都要遵循变量命名规范

    如果模块的py文件所在文件夹和当前文件夹不同

    就要导入此模块

    import sys
    print(sys.path)  所有模块的路径
    sys.path.append(r'D:PyCharmProjects20day26demo') 要导入模块所在的文件夹
    print(sys.path)       查看是否导入成功
    import module1      导入模块

    模块能不能被循环导入

    在b文件中import a

    在a文件中import b

    在a文件中输出内容的顺序

    两个文件都增加变量的情况下,在a文件中打印b中的变量会报错

    模块一旦被导入,再修改这个模块对应的文件是不会生效的

    什么是包

    模块是一个py文件,包就是包含一堆py文件的文件夹  (python2.7中要求所有的包都有一个__init__文件)

    内置的也有模块和包之分

    import 包

    相当于执行了这个包中的init文件     像类的实例化

    import导入

    import 包.模块 as f:

      f.模块方法()

    根据包的导入要精准到模块名,不能精准到具体的函数名或者变量

    然后使用 包.模块 或者重命名的方式

    来使用这个模块中的所有名字

    from import导入

    from 包.包 import 模块

      模块.方法()

    或者

    from 包..模块 import 方法名

      方法名()

    这种导入方式 import后面是至少精确到模块的

    import后面不能有 .

    from后面可以有 .. 的左边永远是包名

  • 相关阅读:
    单点登录cas常见问题(八)
    11G新特性 -- variable size extents
    11G新特性 -- ASM Fast Mirror Resync
    redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
    LINUX使用DVD光盘或者ISO作为本地YUM源
    数据库报ORA-00600: 内部错误代码, 参数: [17059],并产生大量trace日志文件
    Putty设置删除
    ssh/scp 远程连接ssh非默认端口方法
    查看LINUX版本
    RHCE7 -- systemctl命令
  • 原文地址:https://www.cnblogs.com/biulo/p/10667858.html
Copyright © 2020-2023  润新知