python学习笔记-包

#============================模块===========================
# 一个模块就是一个包含pytho代码的文件, 后缀名是.py
# 模块导入:
    import module_name [as alis_module_name]
  module_name.function_name()    #调用模块中的方法
  module_name.class_name #调用模块中的属性

# 假如模块名称直接以数字开头,需要借助importlib帮助
    # 借助于importlib包可以实现导入以数字开头的模块名称
    import importlib
    myModule = importlib.import_module("01")

# 选择性的导入,使用时可以直接使用导入的内容,不需要前缀
  from module_name import func_name, class_name
  func_name()

# 导入模块所有内容
    from module_name import *

# 为有效避免模块代码被导入的时候被动执行的问题,建议所有程序的入口都以此代码为入口
# 只有该段代码作为主程序运行时才会被执行
    if __name__ == __main__:
        pass

# 模块的搜索路径和存储
    import sys
        sys.path #系统默认的模块搜索路径列表
        sys.path.append(dir) #添加搜索路径
        
#模块的加载顺序
  #1. 上搜索内存中已经加载好的模块
  #2. 搜索python的内置模块
  #3. 搜索sys.path路径

#============================包===========================
#包是一种组织管理代码的方式,包里面存放的是模块
#自定义包的结构:
  |---包
  |---|--- __init__.py  包的标志文件
  |---|--- 模块1
  |---|--- 模块2
  |---|--- 子包(子文件夹)
  |---|---|--- __init__.py  包的标志文件
  |---|---|--- 子包模块1
  |---|---|--- 子包模块2

#包的导入:
# import一个包名,就等于执行了这个包下的__init__文件
# 方法1、仅导入当前包 `__init__.py`文件中所有的函数和类
    import package_name [as alis_package_name] 
    package_name.func_name
  package_name.class_name.func_name()
    
#    方法2、导入包中某一个具体的模块,包括`__init__.py`文件
    import package.module [as alis_module] 
    package.module.class_name.function()
    
# 方法3、同方法1,仅导入当前包 `__init__.py`文件中所有的函数和类
    from package import * 
    func_name()
  class_name.func_name()
  
# `__all__` 的用法
    # 在使用from package import * 的时候, * 可以导入的内容  
    # `__init__.py`中如果文件为空, 或者没有 `__all__`, 那么只可以把`__init__`中的内容导入
    # `__init__` 如果设置了`__all__`的值,那么则按照`__all__` 指定的子包或者模块进行加载
    # 如此则不会载入`__init__`中的内容
    __all__=['module1', 'module2', 'package1'.........]  

    
#    方法4、不导入`__init__.py`的定义的方法,但是`__init__.py`的函数(例:print)会执行
    from package import module1, module2, module3, ..... 
    module2.function_name()

# 方法5、导入包中指定的模块的所有内容 
    from package.module import *
    func_name()
  class_name.func_name()
    
#============================命名空间============================
# 用于区分不同位置不同功能但相同名称的函数或者变量的一个特定前缀,作用是防止命名冲突
  setName()
  Student.setName()
  Dog.setName()

    

猜你喜欢

转载自blog.csdn.net/maopc1987/article/details/85243937