zoukankan      html  css  js  c++  java
  • python's twenty eithth day for me 模块和包

    模块:

      什么是模块:

        常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,但其实import加载的模块分为四个通用类别:

        1,使用python编写的代码(.py文件)

        2,以被编译为共享库或DLL的C或C++扩展。

        3,包好一组模块的包。

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

    import:

      import 模块名:

        1,导入一个模块。

        2,相当于这个模块从上到下一次被执行了。

        3,同一个模块不会被多次导入。

    import my_module
    # 使用模块中的属性或方法时:模块名.方法名()  模块名.属性名
    print(my_module.money)   # 100  # 使用模块中的属性名或方法名。
    my_module.func()    # 1

      1,import my_module 模块,首先创建一个属于my_module的内存空间

      2,加载my_module模块中的所有代码

      3,将my_module模块中的名字方法放在my_module的命名空间中

    import...as...:将...模块导入命名为...

    import my_module as m
    print(m.money)  # 100
    m.func()    # 1
    inp = input('json or pickle >>>')
    if inp == 'json':
        import json as m
    elif inp == 'pickle':
        import pickle as m
    dic = {'k':'v'}
    print(m.dumps(dic))
    print(m.loads(m.dumps(dic)))

    import 可一次导入多个模块:不推荐使用。

    import hashlib,json,pickl

    python PEP8规范:

      1,每一行 import 应该导入一个模块。

      2,如果不是必要的需求,所有的模块都应该在文件的顶端导入。

      3,关于导入模块的顺序,先导入内置的,再导入扩展,最后导入自定义。

    导入模块是将模块放入到 sys.modules 中,使用变量的时候看的是全局命名空间globals().

    import sys
    import my_module
    print(globals())
    print(sys.modules)

    from 模块名 import 方法名或者属性名:

      1,导入的名字直接属于全局,但是指向模块的名字所在的内存空间

      2,导入的名字如果是是函数或者方法,引用了全局的变量,仍然使用模块中的变量

      3,导入的名字和全局的名字是一样的,谁最后抢占到就是谁的

    from my_module import money,func
    # 这种导入就不能使用模块名.属性名或方法名了,否则会报错。
    # 这样导入的属性或者方法名就属于全局变量,可直接调用。
    print(money)    # 100  此时是模块局部中的money
    money = 999
    print(money)    # 999   先加载模块中的money,然后加载本全局变量中的money会将模块中的覆盖
    fu

    nc() # 100 # 用到的变量仍然是局部的变量。

    from 模块 import * : 默认会把模块中所有名字都导入到全局:

    from my_module import *
    print(money)
    func()

    * 和 __all__配合使用:在被导入模块中如果有__all__ = [‘属性名’,‘方法名’],则只能调用__all__列表中拥有的名字。其他的都不可调用。

  • 相关阅读:
    软件测试工具
    nat 转发
    修改Oracle 10g Express Edition的字符集
    java数字证书学习笔记
    【Java–XML】JDOM解析XML字符串(非XML文档)
    JAVA Web快速开发部署(Javarebel实现真正高效的tomcat热部署)
    热天稀饭配方
    javascript 使用正则实现replaceall功能
    设置eclipse中各类型文件的默认浏览器(如设置flex的.mxml的编辑器为MXML Editor)
    GAE中JDO数据清除
  • 原文地址:https://www.cnblogs.com/stfei/p/8944731.html
Copyright © 2011-2022 走看看