zoukankan      html  css  js  c++  java
  • py 的第 21 天

    模块的导入, 

    什么事模块?已经写好的一组功能的集合

    别人写好的函数,变量   方法   放在一个文件里(这个文件可以被直接使用) 这个 文件就是个模块

    1如何自己写模块

    一般分为3种 py文件   dll文件   zip  文件

    如何自己写一个模块创建一个py文件,给它起一个符合变量名命名规则的名字,这个名字就是模块名

    import   模块名,和正常导入模块一样  不要带。py

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

      使用: 打印东西直接print  变量名(模块名)。变量名   print(变量名(模块名)。函数名)内存地址   print变量名。函数名() 打印函数

    import  命名空间

    变量=xxx

    print 变量   这个变量打印的是xxx    而如果变量名重复了,要打印模块里的该变量   要print变量(模块名)。变量

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

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

        # 找到这个模块

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

        # 如果没有被导入过

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

            # 让模块的名字 指向 这个空间

            # 执行这个模块中的代码

    怎么判断这个模块是不是导入过了

    import  sys         所有被导入过的模块都会在这里存上

     print (sys。modules)  这个打印出来可以看一看是否被导入过   拿名字去查一下

    给模块起别名,  起了别名之后  之后也都使用别名来引用变量了

    import 变量名(模块名)as   m

    # json pickle

    # dumps loads

    # def func(dic,t = 'json'):

    #     if t == 'json':

    #         import json

    #         return json.dumps(dic)

    #     elif t == 'pickle':

    #         import pickle

    #         return pickle.dumps(dic)

    #

    # def func(dic, t='json'):

    #     if t == 'json':

    #         import json as aaa

    #     elif t == 'pickle':

    #         import pickle as aaa

    #     return aaa.dumps(dic)       起别名的另一种用法,简化代码   相同的代码写一个就行

    导入多个模块

    # 导入多个模块

    # import os,time

    # import os as o,time as t

    # 规范建议 模块应该一个一个的导入 : 自定义模块,第三方模块,内置模块

    # 内置模块

    # 扩展(第三方)模块

    自定义模块      正常是不分顺序的,各自内存地址,但是你看别人代码,或别人看你代码,大家都方便

    模块的导入  fromimport

    from  模块名   import   变量名      引入模块中的这个变量

    如何使用 fromimport

    需要从一个文件中使用哪个变量,就把这个名字导入进来

    from    import   过程中仍然会执行这个被导入的文件

    from 模块名  import    函数名       你这里哪个函数名,就只用哪个函数

               这个函数里有 模块里的变量,正常使用,所以我怀疑,固定了一个函数名,就除了这个函数,其他函数不调用,其他都调用,但是外面不能用变量

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

    from 模块名  import    函数名   下面也有同一个函数名的话,就会把上面的覆盖,执行下面自己写的函数

      from 模块名  import    函数名2   再饮用一次的话,并不会打印出之前的文件

    from   import    导入过程中的事

    1.找到要被导入的模块

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

    3.如果这个模块没被导入过

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

        执行这个文件           2      如果模块被导入过这两点直接过

        找到你要导入的变量

        给你要导入的变量创建一个引用,指向要导入的变量

    导入多个名字

    from   模块名  import   函数名1,函数名2这样就两个模块都能用了

    给导入的模块起别名     老套路 函数名1  as   xx   bj4   这样就和新创建的函数名不冲突了

    from   模块名  import  *   直接import  模块名,也能用  不过那就是  模块名。什么,模块名。什么 了

    这样你就直接使用 模块里的变量,函数名就行了

    *的话也是把里面的做成一个内存地址,你如果再写一个变量,函数 还是会覆盖

    *和__all__    all 后面只能跟列表

    *会参考  模块名里的 all     如果没有all  会导入所有东西   如果all 里只有1个值 就只打印这一个值  里面有几个值,打几个值

    all 只会约束星    如果 from  模块名   import    一个all里没有的, 也是会打印 

    模块引用的情况

    1模块的循环引用   ***

    一个纯的    函数组成的    多个模块之间   不能形成循环引用

    2模块的加载与修改  *

    已经被导入的模块发生了修改是不会被感知到的         import   time  

                                importlib     

                                模块名

                            time。sleep (20)   默认是秒 

                            importlib。reload(模块名)  重新导入一次

                            模块名。函数名()这时候 你在这20秒里怎么改函数,函数20秒后都打印出来是你改的最新的  

            要想修改的模块被正在运行中的程序感知到,也就只能重启这个程序了     

    3把模块当成脚本执行  *****

          执行一个文件的方式   1在cmd里执行,在pycharm执行,-以脚本的形式运行这个文件

                    2 导入这个文件

          都是py文件

              直接运行这个文件,这个文件就是一个脚本

                导入一个文件,那这个文件就是一个模块  希望文件在导入的过程中没有输出

          当一个py文件当成一个脚本使用的时候,能够独立的提供一个功能  能自主交互

            当成1个模块的时候,能够被导入调用这个功能  等被调用再交互

                    一个文件中的__name___变量

                  当这个文件被当作脚本执行的时候这个变量就等于main   

                  当这个文件被当作模块执行的时候这个变量就等于模块名        可以在模块里写上,if __name__==‘__main__'  下面再来条件,这样就执行的时候才输出

            if __name__==‘__main__'

                代码

              写在这里面的代码只有被当作脚本执行的时候才执行

            tips   main写完直接按下tap键就 完了 不用再打印了

    4.模块的搜索路径    *****这个和写项目完全挂钩

    和被当作脚本执行的文件 同目录下的模块 可以被直接导入

    除此之外其他路径下的模块,在被导入的时候需要自己修改sys。path列表

             import  sys 

      import 模块名         这个模块不在同一目录

                      print(sys。path)   这就是查看现在的目录

          path=r 文件目录     加r是防止转义

    sys。path  。append   (path) 这个path就是上一行写的文件目录                    sys。path 就是一个列表

        这样你在impor  模块名     就OK了

  • 相关阅读:
    软件补丁问题(网络流24题)
    飞行员配对方案问题(网络流24题)
    [NOIp普及组2011]瑞士轮
    如何在Linux上安装QQ
    [洛谷P2420] 让我们异或吧
    高斯消元
    [SCOI2014]方伯伯的OJ
    [USACO1.3]虫洞
    KMP算法讲解
    [洛谷P1382] 楼房
  • 原文地址:https://www.cnblogs.com/Mrszhao/p/9537602.html
Copyright © 2011-2022 走看看