zoukankan      html  css  js  c++  java
  • python全栈开发 * 31知识点汇总 * 180716

    31 模块和包
    一.模块
    (一)模块的种类:内置模块,自定义模块,扩展模块第三方模块
    (二)自定义模块
    1.模块的创建 : 新建一个py文件.
    2.模块名 : 模块名需要符合变量的命名规范.
    3.模块的导入 import: (注意:导入模块时,python报错提示不可靠;import空格 文件名 不带.py.)
    (1).导入过程做了什么事?
    相当于执行了一个被导入的py文件
    (2).会重复导入吗?
    不会,所有被导入的模块都会存在sys.modules中,这个字典中的key是这个模块的名字,value是模块的内存地址
    (3).导入后可以直接使用这个模块中的函数和变量, 模块名.函数或变量名
    每一个模块的导入都会创建一个属于自己的命名空间.
    (4).导入模块时发生了什么?
    创建一个属于这个模块的命名空间;
    执行这个模块中的代码;
    创建一个引用来调用这个模块命名空间中的名字;
    将这个模块的的内存地址存储在sys.modules中.
    (5)为模块起别名.
    import 模块名 as m
    以上操作为导入模块重命名,重命名后新的名字会存储在内存空间中,作为模块的引用,但原模块名不能在文件中使用.
    使用情况有两种:
    a: 模块名较长时可以使用,节省代码,增强可读性.
    b: 两个模块提供的功能相同.
    序列化json pickle
    你提供序列化功能,帮助用户对***进行序列化
    def dump(somthing,m = 'json'):
    if m == 'json':
    import json as m
    else:
    import pickle as m
    m.dumps(somthing)
    数据库
    oracle oracle_db
    mysql mysql_db
    if db_name=="mysql":
    import mysql_db as db
    elif db_name=="oracle":
    import oracle_bd as db
    db.connect()
    db.exec()
    (6)导入多个模块
    导入的模块都写在文件的最开始;
    导入顺序:先导入内置模块,再导入扩展模块,最后导入自定义模块;
    格式:分开写,导入的各模块中间空一行;
    另一种写法: 写一行:import os,sys,flash
    重命名:import os as o,sys as s,flask as f
    4.导入模块 from 模块名 import变量名(方法名)
    没被导入的其它名字不能用了
    (1)导入过程中发生什么事:
    执行整个被导入的模块;
    (2) 创建一个命名空间 ,并把模块中的所有名字都存在命名空间中;
    (3)导入后, 使用模块中的名字不需要用 模块名.函数名或变量名 ,
    而是导入什么名字就能用什么名字 没有导入的名字不能用.
    (4)导入多个名字
    from 模块名 import 变量名,变量名 ( 写一行)
    from 模块名 import 变量名
    from 模块名 import 变量名 (分开写)
    (5)重命名
    from 模块名 import 变量名 as s ,变量名 as m
    (6)* 和__all__
    from 模块名 import * (* 导入全部变量名 一般不用)
    (7)情况分析
    如果模块中有20个方法,只用一个,用from 模块名import 方法名;
    如果模块中有20个方法,用十个,用import方法;
    import* 不定义__all__,*可以导入模块中的所有名字,,如果有__all__=[ 变量名,变量名] *只可以导入出现在__all__列表中的变量名.


    (三)模块的循环作用 (互相引用)==>直接报错
    1.依赖倒置原则: 高层不应该依赖低层模块.
    2.a引用b,b是a的高层.

    (四)模块的加载与修改
    1.模块一旦引入并加载完,再改导入模块中的内容,当前文件中不会改变还是用原值.
    2.如果想改,import importlib (内置模块)
    import importlib
    importlib.reload(模块名) 使修改生效
    (五)把模块当做脚本来执行

    (六)模块的搜索路径
    二.包
    (一)导入模块
    (二)导入包
    (三)绝对导入
    (四)相对导入
    (五)__all__和*
  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9326486.html
Copyright © 2011-2022 走看看