zoukankan      html  css  js  c++  java
  • 模块的一系列操作

    帅爆太阳的男人

    1,from import  ,仍然相当于执行了整个py文件,命名空间发生了改变

    • 1.1>导入什么,就能使用什么,不导入的变量不能使用,不导入并不意味着不存,而是没有建立文件到模块中其他名字的引用
      • form my_module import login
      • login().................直接执行模块中的login函数
    • 当模块中导入的方法或者变量和本文件重名的时候,那么这个名字只代表最后一次对它赋值的那个方法或者变量

    在文件中对全局变量的修改是完全不会影响到模块的变量引用的(你只修改的是引用的名字,而对模块中的)

    • 1.2>重命名
      • from my_module import login as l.........导入模块中的login函数并命名成 l ,在这里重命名也只是引用名的改变
      • l()....................................................执行模块中的login函数
    • 1.2.1>从模块中导入多个变量
      • from my_module import login ,name

    这时导入的login函数和name变量都能被引用了

    • 1.2.2>从模块中导入多个变量的重命名
      • from my_module import login as l,name as n
      • 此时就可以 l() ;来执行模块中的login函数,用n来执行模块中的变量n
    • 1.3>可以用__all__来控制导入的内
      • from my_module import *..............................这时从模块中导入所有内容

    __all__边的中括号可以添加不同的变量名字,只有被添加了才能被引用,不被添加则不能被引用

    2,pyc编译文件和重新加载模块

    • import aaa导入模块的时候
    • python的执行   -------->解释-编译
    • 当一个文件作为一个脚本被导入的时候,就会在这个文件所在的目录的__pycache__下生成一个编译好得到文件,为了之后导入这个文件的时候直接读这个编译好的pyc文件就可以,这样可以节省一些导入时候的时间(就是一次缓存好,以后就可以直接访问,无需再去编译文件)

     3.把模块当成脚本运行

    • 3.1>以模块的形式运行
      • import ,my_module
      • if __name__ == "__main__":.................增加一个判断,当导入的模块中的__name__等于次文件的"__main__"的时候就执行以模块的方式运行程序(需要不放在类和函数中只在脚本中运行,不在模块中运行)

        my_module.login()

    • 3.2>直接在pycharm中运行,cmd运行
      • 以脚本的形式运行 
      • if __name__ == "__main__":................判断当此文件的__name__等于 "__main__"时,就以脚本运行(相等就意味着在一个文件下,因此执行脚本运行)

        直接运行

    在编写py文件的时候

    • 所有不在函数和类中封装的内容都应该写在:
      • if __name__ == "__main__"下面
      • import sys
      • import my_module了所有导入的文件的名字和这个问价的内存地址

    sys.moduls.....................{"sys":文件的内存地址,"my_module":my_module的内存地址}存储了所有导入文件的名字和这个文件的内存地址

    在使用反射自己模块中的内容的时候

    • 直接导入模块就好了............import  my_module

    在模块的里边要导入    import sys

    反射自己模块中的内容时,

    • getattr(sys.modules[__name__],"变量名")

     4,模块搜索路径

    在导入的模块不同级的时候,需要模块搜索路径,在同级的情况下模块的导入可以直接导入,不同级的情况下就需要去搜索路径,并且需要把要导入的模块的绝对路径添加到sys.path列表中

    • 4.1>同级(是指在同一个文件夹下或者同一个包下)路径下,直接导入模块即可
    • 4.2>在不同级的情况下,需要搜索路径,再导入模块

        

    以下是要导入的模块(用到了反射)

        

    5,重新加载模块

    import sys
    sys.path.append("D:/python/帅爆太阳的男人/Python学习笔记/日记")
    from text.bbb import b1
    import time
    time.sleep(20)
    importlib .reload(b1)  # 不推荐使用,模块一次性写好

      

    6,模块的循环引用

    • 在模块的导入中,不要产生循环信用问题
    • 如果发生循环导入
    • 就会发现明明写在这个模块中的方法,就是显示找不到了

    7,包:包是通过使用"模块名"来组织python模块名称空间的方法

    • 7.1>无论是import形式还会from....import形式,凡是在导入语句中(而 不是在使用时)遇到带点的(.),都要第一时间提高警觉:这是关于包才有的导入语法
    • 7.2>包是目录级的(文件夹级),包里边方的是一个个的py文件,包的本质就是一个(包含__init__.py文件的目录)
    • 7.3>import导入文件时,产生名称空间的名字来源于文件,import包,产生的名称空间同样来源于文件,即(包下__init__.py),导入包就是导入该文件

    重点:

    • 1>在python3中,即使包下没有__init__.py文件,import包仍然不会报错,而在python2中,包下一定要有该文件,否则        import会报错
    • 2>创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式,模块的集合

    导入包的两种方式:

    • 第一种,绝对路径:在每一个包下面的__init__文件里丢要路径里都要写入搜索路径  
      • import sys
      • sys.path.append("路径")
    • 绝对路径实质就是模块里边导入模块.直至导入自己想用的模块
    • 第二种,相对路径:在每一个包下面__init__只需加入from . import 文件名,这里的.是返回上一层目录

    8,代码的规范:

  • 相关阅读:
    easyUI footer 的格式渲染
    VS常用快捷键(最全)
    vs2008 asp.net “无法连接到ASP.NET Development server”
    Microsoft ReportViewer 控件类型版本兼容问题及解决方法
    提取 Microsoft.ReportViewer等dll
    百度地图根据list经纬度算每个点到剩余点的平均距离、最远距离和最近距离
    求数组的最大值、最小值、平均值
    C#为配置文件加密的实现方法
    去除字符串最后一个逗号
    JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9478266.html
Copyright © 2011-2022 走看看