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()
    
  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11093719.html
Copyright © 2011-2022 走看看