zoukankan      html  css  js  c++  java
  • day 21 模块 和 包

    模块:已经写号的一组功能的集合

    模块名,是按变量的命名规则命名的

    模块的导入:

      import  模块名

        调用模块时  模块名.变量

      模块导入的过程发生了什么?

        一、找到这个模块

        二、判断这个模块是否被导入过了

        三、如果没有被导入   

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

          2. 让模块的名字执行这个空间

          3. 执行这个模块中的代码

    模块规则:

      1. 不能重复导入

      2. 模块和当前文件在不同命名空间

    给模块起别名  :起了别名之后使用这个模块就都使用别名引用变量了

      import  my_moudle as m:

      作用:  

        一、减少名字的代码量

        二、当你要导入的两个模块都起相同的作用时,起一个别名代替

    导入多个模块:

      建议一个一个导入

    导入顺序:  内置模块、第三方模块、自定义模块

     1 by luffycity.com
     2 
     3 什么是模块 ? 已经写好的一组功能的集合
     4 别人写好的函数 变量 方法 放在一个文件里 (这个文件可以被我们直接使用)这个文件就是个模块
     5 py dll文件 zip文件
     6 
     7 如何自己写一个模块
     8 创建一个py文件,给它起一个 符合变量名命名规则的名字,这个名字就是模块名
     9 
    10 import my_module   # pycharm认为你的模块导入不进来
    11 在导入模块的过程中发生了什么?
    12 导入一个模块就是执行一个模块
    13 
    14 怎么使用my_module模块中的名字
    15 print(my_module.name)
    16 print(my_module.read1)
    17 my_module.read1()
    18 
    19 import的命名空间,模块和当前文件在不同的命名空间中
    20 name = 'egon'
    21 def read1():
    22     print('main read1')
    23 
    24 print(name)
    25 print(my_module.name)
    26 
    27 模块是否可以被重复导入
    28 import my_module
    29 import my_module
    30 怎么判断这个模块已经被导入过了???
    31 import sys
    32 print(sys.modules)
    33 
    34 模块导入的过程中发生了什么?
    35     找到这个模块
    36     判断这个模块是否被导入过了
    37     如果没有被导入过
    38         创建一个属于这个模块的命名空间
    39         让模块的名字 指向 这个空间
    40         执行这个模块中的代码
    41 
    42 name = 'egon'
    43 def read1():
    44     print('main read1')
    45 
    46 
    47 print(name)
    48 print(my_module.name)
    49 my_module.read2()
    50 
    51 给模块起别名,起了别名之后,使用这个模块就都使用别名引用变量了
    52 import my_module as m
    53 m.read1()
    54 
    55 json pickle
    56 dumps loads
    57 def func(dic,t = 'json'):
    58     if t == 'json':
    59         import json
    60         return json.dumps(dic)
    61     elif t == 'pickle':
    62         import pickle
    63         return pickle.dumps(dic)
    64 
    65 def func(dic, t='json'):
    66     if t == 'json':
    67         import json as aaa
    68     elif t == 'pickle':
    69         import pickle as aaa
    70     return aaa.dumps(dic)
    71 
    72 导入多个模块
    73 import os,time
    74 import os as o,time as t
    75 规范建议 模块应该一个一个的导入 : 自定义模块,第三方模块,内置模块
    76 内置模块
    77 扩展(第三方)模块
    78 自定义模块
    79 
    80 import os
    81 
    82 import django
    83 
    84 import my_module
    import 模块

    from import

        from  my_module import name

      执行过程中仍然要执行这个被导入的文件

    # from import导入的过程中发生了什么事儿?
      1.找到要被导入的模块
      2.判断这个模块是否被导入过
      3.如果这个模块没被导入过
       创建一个属于这个模块的命名空间
       执行这个文件
       找到你要导入的变量
       给你要导入的变量创建一个引用,指向要导入的变量
    # by luffycity.com
    
    # 如何使用 from import
    # 需要从一个文件中使用哪个名字,就把这个名字导入进来
    # from my_module import name
    
    # from import的过程中仍然执行了这个被导入的文件
    
    # from my_module import read1
    # import谁就只能用谁
    # read1()
    # from my_module import read2
    # read2()
    
    # 当前文件命名空间和模块的命名空间的问题
    # from my_module import read1
    # def read1():
    #     print('in my read1')
    # read1()
    #
    # from my_module import read2
    # read2()
    
    # from import导入的过程中发生了什么事儿?
    # 1.找到要被导入的模块
    # 2.判断这个模块是否被导入过
    # 3.如果这个模块没被导入过
    #     创建一个属于这个模块的命名空间
    #     执行这个文件
    #     找到你要导入的变量
    #     给你要导入的变量创建一个引用,指向要导入的变量
    # from my_module import read1
    # def read1():
    #     print('in my read1')
    # read1()
    #
    # from my_module import read2
    # read2()
    
    # 导入多个名字?
    # from my_module import read1,read2
    # read1()
    # read2()
    
    # 给导入的名字起别名
    # from my_module import read1 as r1,read2 as r2
    # def read1():
    #     print('in my read1')
    # r1()
    # r2()
    # read1()
    
    # from my_module import * 在导入的过程中 内存的引用变化
    # from my_module import *
    # name = 'egon'
    # print(name)   # egon
    # read1()
    # read2()       # alex
    
    # * 和 __all__ __all__能够约束*导入的变量的内容
    # from my_module import *
    # print(name)
    # read1()
    # read2()
    
    # from my_module import read1
    # read1()
    from import

    把模块当成脚本使用

       当这个文件被当作脚本执行的时候 __name__ =="__main__"

      当这个文件被当作模块导入的时候 __name__ ==''模块的名字'

    模块的搜索路径:

    import sys
    import calculate
    print(sys.path)
    path = r'D:sylars15day215模块的循环引用'
    sys.path.append(path)

    模块引用中的情况:

      1. 模块之间不允许循环引用

      2. 已经被导入的模块发生了修改,是不会被感知的

        要想被修改的模块被正在运行中的程序感知到,需要重启这个程序

      3. 把模块当成脚本来使用

    包:

      文件夹中有一个__init__.py文件、是几个模块的集合

      导入一个包,相当于执行了这个包下面的__init__.py文件

    绝对导入:

      优点:执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入

      缺点:所有的导入都要从一个根目录下往后解释文件夹之间的关系;如果当前导入包的文件和被导入的包的位置关系发生了变化,那么所有的init文件都要做相应的调整

    相对导入:

      优点:1.不需要去反复的修改路径,只要一个包中的所有文件夹和文件的相对位置不发生变化

            2.不需要去关心当前这个包和被执行的文件之间的层级关系

      缺点:1、含有相对导入的py文件不能被直接执行

            2、必须放在包中被导入的调用才能正常的使用

     1 # by luffycity.com
     2 
     3 # 包 : 文件夹中有一个__init__.py文件
     4 # 包 : 是几个模块的集合
     5 
     6 # 从包中导入模块
     7 # import
     8 # import glance.api.policy
     9 # glance.api.policy.get()
    10 
    11 # import glance.api.policy as policy
    12 # policy.get()
    13 
    14 # from import
    15 # from glance.api import policy
    16 # policy.get()
    17 
    18 # from glance.api.policy import get
    19 # get()
    20 
    21 
    22 # 直接导入包 ,需要通过设计init文件,来完成导入包之后的操作
    23 # 导入一个包
    24     # 不意味着这个包下面的所有内容都是可以被使用的
    25     # 导入一个包到底发生什么了?
    26         # 相当于执行了这个包下面的__init__.py文件
    27 
    28 # 绝对导入 :
    29 # 在执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入
    30 # 缺点
    31 # 所有的导入都要从一个根目录下往后解释文件夹之间的关系
    32 # 如果当前导入包的文件和被导入的包的位置关系发生了变化,那么所有的init文件
    33 # 都要做相应的调整
    34 
    35 
    36 # import glance
    37 # -glance.__init__.py
    38     # import api
    39 # sys.path = ['D:sylars15day21']
    40 # glance.api.policy.get()
    41 
    42 # from bbbbb import glance
    43 
    44 
    45 # 相对导入 :
    46 # 不需要去反复的修改路径
    47     # 只要一个包中的所有文件夹和文件的相对位置不发生改变
    48 # 也不需要去关心当前这个包和被执行的文件之间的层级关系
    49 # 缺点
    50 # 含有相对导入的py文件不能被直接执行
    51 # 必须放在包中被导入的调用才能正常的使用
    52 
    53 # import glance
    54 # glance.api.policy.get()
    55 
    56 # from bbbbb import glance2
    57 # glance2.api.policy.get()
    58 
    59 # from . import bbbbb   # 含有相对导入的文件不能被直接执行
    60 
    61 # from bbbbb import demo1
    62 
    63 # 如果只是从包中导入模块的话,那么我们不需要做任何多余的操作
    64 # 直接导入就行了
    65 # import urllib   # urllib是一个包,单纯的导入一个包啥也不会发生,包中的request.py也不能用
    66 # urllib.request
    67 
    68 # from urllib import request
    69 # print(request)
    70 
    71 # 如果我们希望导入包的时候,能够顺便把模块也导入进来
    72 # 需要设计init文件
    73 # 绝对目录的导入相对目录的导入各有千秋
  • 相关阅读:
    Ubuntu 16 编译装python2.7
    配置ubunto 流量使用限制 python 实现简单 http server
    vnstat 流量统计 并附带一个小 php 查看流量的页面
    ubunto 免输入密码 登录 putty ssh-keygen
    nes 红白机模拟器 第5篇 全屏显示
    arm 添加 samb 文件共享
    arm 添加 ftp server 之 bftpd
    Tga图片格式分析以及程序实现
    领导力:刘邦的管理之道
    AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
  • 原文地址:https://www.cnblogs.com/xiaobai686/p/11721516.html
Copyright © 2011-2022 走看看