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

    1.  import

    2.  from   inport

    3.  模块引用中的情况

    4.  包

     import

    如何创建一个模块:

    创建一个py文件,给他起一个符合变量命名规则的名字,这个名字就是模块。

    导入模块的时候发生了什么?   

    1.找到模块,判断模块是否被导入过,(import   sys >>>>print(sys.模块名))。

    2.如果模块没有被导入,就创建一个属于这个模块的命名空间。

    3.让模块名指向这个空间,然后执行该模块中的代码。

    导入一个模块就是执行了一个模块

    import name
    print(name.name)
    print(name.read)
    name.read()
    
    
    123456
    alex
    hello,word
    import name
    bbb="jeav yang"
    print(name.bbb)
    # print(name.read)
    name.read()
    print(bbb)
    
    
    
    
    123456
    alex
    hello,word
    jeav yang

    模块的别名:import  模块名   as   新的模块名   如果给模块起了别名,使用这个模块就能使用的别名的应用了

    def func(dic, t='json'):
        if t == 'json':
            import json as aaa
        elif t == 'pickle':
            import pickle as aaa
        return aaa.dumps(dic)

    导入多个模块:

    以os模块为例:import  os .time>>>>>>>import  os  as o,time  as  t

    模块的导入顺序:

    内置模块>>>>扩展模块>>>>自定义模块

     from import

    怎么使用from import:需要从哪个文件中使用那个名字,就把这个名字导入进来

    egg:from
    my_module import  name

    引入from import 的时候,仍然执行了这个被导入的文件,就是import谁,就执行谁

    from my_module import read1
    read1()
    
    
    12345
    54321
    hello world

     当前文件命名空间和模块的命名空间问题:

    如果被引用的名字在当前文件中,就执行当前文件的名字

    from  import 导入的时候发生了什么

    1.找到要被导入的模块

    2.判断模块是否被导入过

    3.若没有被导入就创建一个属于这个模块的命名空间。

    4.执行这个文件

    5.如果被导入过,找到你要导入的变量,给导入的变量创建一个引用,指向要导入的变量

    导入多个名字

    from my_module import read1,read2
    read1()
    read2()
    
    
    
    12345
    54321
    hello world
    in read1 func alex

    给导入的名字起别名:避免导入的名字和当前文件中的名字重复:

    from my_module import read1 as r1,read2 as r2
    def read1():
        print('in my read1')
    r1()
    r2()
    read1()
    
    
    12345
    54321
    hello world
    in read1 func alex
    in my read1

    其他操作

    from my_module import *   表示执行导入模块的所有内容

    from my_module import *
    name = 'egon'
    print(name)   # egon
    read1()
    read2()  
    
    12345
    54321
    egon
    hello world
    in read1 func alex

    _all_约束*导入的个数     _all_=[谁],就导入谁,只能用来约束

    模块引用中的情况

    1.模块的循环引用     重点***

    模块间不允许循环引用

    2.模块的加载和修改

    如果已经被导入到的模块发生了修改,是不会被感知到的,想要修改的话就要重启程序

    3.把模块当成脚本来使用  贼重要************

    if __name__ == '__main__':
      代码
    写在这里面的代码只有这个文件被当做脚本执行的时候才执行
    当一个py文件做脚本的时候,就提供一个功能。当作为模块导入的时候,能调用这个功能,但不能自主交互

     一个文件中的_nane_变量:

    当文件被当做脚本执行的时候,_name_=="_main_"

    当文件被当做模块导入的时候,_name _=="模块的名字"

    4.模块搜索路径

    被当做脚本执行文件的时候,同目录下的文件可以直接导入,除此之外,其他路径下的模块被导入的时候需要自己修改sys.path列表

     不在同一目录下的话:就调用sys模块

    import  sys

    print(sys.path)

    path=r"要导入模块的路径'

    sys.path.append(path)

    然后调用你要导入的模块

    import sys
    print(sys.path)
    path=r"F:上课作业视频模块的相关知识day21codeday215模块的循环引用"
    sys.path.append(path)
    import hhh
    
    ['F:\上课作业视频\模块的相关知识\day21\code\day21', 'F:\上课作业视频', 'C:\Python36\python36.zip', 'C:\Python36\DLLs', 'C:\Python36\lib', 'C:\Python36', 'C:\Python36\lib\site-packages', 'C:\Program Files\JetBrains\PyCharm 2018.1.3\helpers\pycharm_matplotlib_backend']
    123456798

     包:凡是导入时带点的,点的左边必须是包

    什么是包:文件夹中有一个__int__.py文件,也是几个模块的集合

    从包中导入模块:

    1.import方式

    egg:

    import glance.api.policy as hhh

    hhh.get()

    2.from import

    from glance.api.import policy

    egg:

    from glance.api.policy import get

    get()

  • 相关阅读:
    国外的零日漏洞记录片(中文字幕)
    浅谈网络爬虫中广度优先算法和代码实现
    浅谈网络爬虫中深度优先算法和简单代码实现
    Python正则表达式的简单应用和示例演示
    Python正则表达式初识(十)附正则表达式总结
    Python正则表达式初识(九)
    Python正则表达式初识(八)
    Python正则表达式初识(七)
    Python正则表达式初识(六)
    Python正则表达式初识(五)
  • 原文地址:https://www.cnblogs.com/wqzn/p/9526555.html
Copyright © 2011-2022 走看看