zoukankan      html  css  js  c++  java
  • Python -- 自定义模块

    模块的分类:

    • 第一类: 内置模块,也叫标准库.次来模块是Python解释器提供的,比如time,os模块.标准库模块有200多种.
    • 第二类: 第三方模块,第三方库. 一些Python大神写的非常好用的模块,必须通过pip install指令安装模块.比如BeautifulSoup , Django等.大概有6000多种.
    • 第三类: 自定义模块. 自己在项目中定义的一些模块

    6.1 自定义模块

    1) import 模块名 ---- 导入某模块

    第一次导入模块执行三件事

    1. 创建一个以模块名命名的名称空间
    2. 执行这个名称空间(导入模块) 里面的代码
    3. 通过此模块名 . 的方式引用该模块里面的内容(变量,函数名,类名等)

    被导入的模块有独立的名称空间: 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突.

    可以为模块起别名: import 模块名 as 别名

    • 可以将很长的模块名改成很短,方便使用
    • 有利于代码的扩展和优化

    导入多个模块: 推荐一个一个导入 -- 多行导入:易于阅读,易于编辑,易于搜索,易于维护

    2) from...import...

    from 模块名 import 变量,函数名

    from...import... 与import对比: 使用from...import...是将模块中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了.无需加前缀:模块名.

    form..import.. 的方式有好也有坏:

    • 使用起来方便
    • 容易与当前执行文件中的名字冲突.如果执行文件有与模块同名的变量或者函数名,就会有覆盖效果.

    3) from...import*

    from ... import * 与__all__配合使用(写在模块文件中)

    __all__ = ['name','read1'] 写在模块文件中,控制 * 的取值范围 只导入模块中的两个函数

    4) py文件的两种功能

    编写好的一个Python文件可以有两种用途

    1. 脚本,一个文件就是整个程序,用来被执行
    2. 模块,文件中存放着一堆功能,用来被导入使用

    Python为我们内置了全局变量__name__

    1. 当文件被当做脚本执行时:__name__等于__main__

    2. 当文件被当做模块导入时:__name__等于模块名

      • 作用: 用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
      print('from the ABC.py')
      
      __all__ = ['name', 'read1',]
      
      name = 'aaa'
      
      def read1():
         print('tbjx模块:',name)
      
      def read2():
         print('tbjx模块')
         read1()
      
      def change():
         global name
         name = 'barry'
         
      if __name__ == '__main__':  
         # 在模块文件中测试read1()函数
         # 此模块被导入时 __name__ == tbjx 所以不执行
         read1()
      

    5) 模块的搜索路径

    内存中已经加载的模块->内置模块->sys.path路径中包含的模块

    模块的查找顺序

    1. 在第一次导入某个模块时,会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用(ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看)
    2. 如果没有,解释器则会查找同名的内置模块
    3. 如果还没有找到就从sys.path给出的目录列表中依次寻找模块文件。
    # 寻找模块的路径: 内存 ----> 内置模块  ---> sys.path中找
    # 只要这三个地方:内存 内置模块 sys.path可以找到这个引用的模块的路径,这个模块就可以直接引用到.
    
    # 如何引用到tbjx1.py
    import sys
    # print(sys.path)  是一个列表
    sys.path.append(r'D:s23day15')
    import tbjx1
    tbjx1.read1()
    
  • 相关阅读:
    jquery获取对象的方法足以应付常见的各种类型的对象
    jquery如何判断表格同一列不同行input数据是否重复
    老司机带你解读jQuery插件开发流程
    jQuery插件开发详细教程
    jquery动态调整div大小使其宽度始终为浏览器宽度
    jQery使网页在显示器上居中显示适用于任何分辨率
    R语言学习——数据框
    java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
    java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
    java实验四——找鞍点
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11093719.html
Copyright © 2011-2022 走看看