1. 模块

  • 一个模块就是一个包含python代码的文件,后缀名称是.py就可以,模块就是个python文件
  • 为什么我们用模块
    • 程序太大,编写维护非常不方便,需要拆分
    • 模块可以增加代码重复利用的方法
    • 当作命名空间使用,避免命名冲突
  • 如何定义模块
    • 模块就是一个普通文件,所以任何代码可以直接书写
    • 不过根据模块的规范,最好在本块中编写以下内容
      • 函数(单一功能)
      • 类(相似功能的组合,或者类似业务模块)
      • 测试代码
  • 如何使用模块
    • 模块直接导入

      • 模块名称直接以数字开头,需要借助importlib帮助
    • 语法

      import module_name module_name.function_name module_name.class_name

    • 案例 01.py,02.py,p01.py,p02.py

        # 案例 01.py# 包含一个学生类# 一个sayHello函数# 一个打印语句class Student():def __init__(self, name = "NoName", age = 18):self.name = nameself.age = agedef say(self):print("My name is {0}".format(self.name))def sayHello():print("Hi, ")print("我是模块p0")复制代码
        # 案例 02.py# 借助于importlib包可以实现导入以数字开头的模块名称import importlib# 相当于导入了一个叫01的模块并把导入模块赋值给了aa = importlib.import_module("01")stu = a.Student()stu.say()
    复制代码
       # 案例 p01.py# 包含一个学生类# 一个sayHello函数# 一个打印语句class Student():def __init__(self, name = "NoName", age = 18):self.name = nameself.age = agedef say(self):print("My name is {0}".format(self.name))def sayHello():print("Hi, ")# 此判断语句建议一直作为程序的入口if __name__ == '__main__':print("我是模块p01")
    复制代码
       # 案例 p02.pyimport p01stu = p01.Student("xiaojing", 19)stu.say()p01.sayHello()
    复制代码
       My name is xiaojingHi,
    复制代码
    • import 模块 as 别名

      • 导入的同时给模块起一个别名
      • 其余用法跟第一种相同
      • 案例 p03.py
        # 案例 p03.pyimport p01 as pstu = p.Student("yueyue", 18)stu.say()
    复制代码
       My name is yueyue
    复制代码
    • from module_name import func_name, class_name

      • 按上述方法有选择性的导入
      • 使用的时候可以直接使用导入的内容,不需要前缀
      • 案例 p04
        # 案例 p04.pyfrom p01 import Student, sayHellostu = Student()stu.say()sayHello()
    复制代码
        My name is NoNameHi,
    复制代码
    • from module_name import *

      • 导入模块所有内容
      • 案例 p05.py
           # 案例 p05.pyfrom p01 import *sayHello()stu = Student("yaona", 20)stu.say()
    复制代码
       Hi, My name is yaona
    复制代码
  • if __name__ == ``__main__ 的使用
    • 可以有效的避免模块代码被导入的时候被动执行的问题
    • 建议所有程序的入口都以此代码为入口

2. 模块的搜索路径和存储

  • 什么是模块的搜索路径

    • 加载模块的时候,系统会在哪些地方寻找此模块
  • 系统默认的模块搜索路径

      import syssys.path  属性可以获取路径列表# 案例 p06.py
    复制代码
       # 案例 p06.pyimport sysprint(type(sys.path))print(sys.path)for p in sys.path:print(p)
    复制代码
           <class 'list'>['D:\\python\\project\\包管理', 'D:\\PyCharm Community Edition 2019.1.1\\helpers\\pydev', 'D:\\python\\project', 'D:\\PyCharm Community Edition 2019.1.1\\helpers\\third_party\\thriftpy', 'D:\\PyCharm Community Edition 2019.1.1\\helpers\\pydev', 'C:\\Users\\user\\.PyCharmCE2019.1\\system\\cythonExtensions', 'D:\\python\\project\\包管理', 'D:\\Anaconda3\\envs\\opp\\python37.zip', 'D:\\Anaconda3\\envs\\opp\\DLLs', 'D:\\Anaconda3\\envs\\opp\\lib', 'D:\\Anaconda3\\envs\\opp', 'D:\\Anaconda3\\envs\\opp\\lib\\site-packages']D:\python\project\包管理D:\PyCharm Community Edition 2019.1.1\helpers\pydevD:\python\projectD:\PyCharm Community Edition 2019.1.1\helpers\third_party\thriftpyD:\PyCharm Community Edition 2019.1.1\helpers\pydevC:\Users\user\.PyCharmCE2019.1\system\cythonExtensionsD:\python\project\包管理D:\Anaconda3\envs\opp\python37.zipD:\Anaconda3\envs\opp\DLLs    D:\Anaconda3\envs\opp\libD:\Anaconda3\envs\oppD:\Anaconda3\envs\opp\lib\site-packages
    复制代码
  • 添加搜索路径

      sys.path.append(dir)
    复制代码
  • 模块的加载顺序

    1. 搜索内存中已经加载好的模块
    2. 搜索python的内置模块
    3. 搜索sys.path路径

  • 包是一种组织管理代码的方式,包里面存放的是模块

  • 用于将模块包含在一起的文件夹就是包

  • 自定义包的结构

      |---包|---|---  __init__.py  包的标志文件|---|---  模块1|---|---  模块2|---|---  子包(子文件夹)|---|---|---  __init__.py|---|---|---  子包模块1|---|---|---  子包模块2复制代码
  • 包的导入操作

    • import package_name

      • 直接导入一个包,可以使用__init__.py中的内容

      • 使用方式是:

          package_name.func_namepackage_name.class_name.func_name()
        复制代码
      • 此种方式的访问内容是

      • 案例 pkg01, p07.py

     # pkg01.__init__pydef inInit():print("I am in init of package")# pkg01.p01.pyclass Student():def __init__(self, name = "NoName", age = 18):self.name = nameself.age = agedef say(self):print("My name is {0}".format(self.name))def sayHello():print("Hi, ")print("我是模块p01")
    复制代码
       # 案例 p07.pyimport pkg01pkg01.inInit()
    复制代码
       I am in init of package复制代码
    • import package_name as p

      • 具体用法跟作用方式,跟上述简单导入一致
      • 注意的是此种方法是默认对__init__.py内容的导入
    • import package.module
      • 导入包中某一个具体的模块

      • 使用方法

          package.module.func_namepackage.module.class.fun()package.module.class.var
        复制代码
      • 案例 p08.py

        # 案例 p08.pyimport pkg01.p01stu = pkg01.p01.Student()stu.say()
    复制代码
       我是模块p01My name is NoName复制代码
    • import package.module as pm
  • from ... import 导入

    • from package import module1, module2, module3, ... ...

    • 此种导入方法不执行 __init__ 的内容

        from pkg01 import p01p01.sayHello()
      复制代码
    • from package import *

      • 导入当前包 __init__.py 文件中所有的函数和类

      • 使用方法

          func_name()class_name.func_name()class_name.var复制代码
      • 案例 p09.py, 注意此种导入的具体内容

      # 案例 p09.pyfrom pkg01 import *inInit()stu = Student()
    复制代码
       I am in init of packageNameError: name 'Student' is not defined
    复制代码
  • from package.module import *

    • 导入包中指定的模块的所有内容

    • 使用方法

        func_name()class_name.func_name()复制代码
  • 在开发环境中经常会引用其他模块,可以在当前包中直接导入其他模块中的内容

    • import 完整的包或者模块的路径
  • __all__ 的用法

    • 在使用from package import * 的时候,* 可以导入的内容
    • __init__.py 中如果文件为空,或者没有 __all__, 那么只可以把 __init__ 中的内容导入
    • __init__ 如果设置了 __all__ 的值,那么则按照 __all__ 指定的子包或者模块进行加载

    如此则不会载入 __init__ 中的内容

    • __all__=['module1', 'module2', 'package1'... ...]
    • 案例 pkg02,p10.py
      # pkg02.__init__.py__all__=['p01']def inInit():print("T am in init of package")# pkg02.p01.pyclass Student():def __init__(self, name = "NoName", age = 18):self.name = nameself.age = agedef say(self):print("My name is {0}".format(self.name))def sayHello():print("Hi, ")# 此判断语句建议一直作为程序的入口if __name__ == '__main__':print("我是模块p01")
    复制代码
       # 案例 p10.pyfrom pkg02 import *stu = p01.Student()stu.say()
    复制代码
      My name is NoName
    复制代码

命名空间

  • 用于区分不同位置不同功能但相同名称的函数或者变量的一个特定前缀

  • 作用是防止命名冲突

      setName()Student.setName()Dog.setName()

本文首发于python黑洞网,csdn同步跟新

Python 包管理相关推荐

  1. Python包管理工具Distribute的安装

    Python包管理工具Distribute的安装 Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute,那麽这几个工具有什么关系呢,看 ...

  2. Pipenv – 超好用的 Python 包管理工具

    pipenv 是什么 pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv.pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer. 我们知道, ...

  3. Python 包管理工具解惑

    本文转载自http://zengrong.net/post/2169.htm,感谢原作者. 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: ...

  4. python 包管理工具poetry

    | python 包管理工具poetry的使用 poetry 是一个python管理虚拟环境和依赖的管理工具,poetry和pip 类似,另外还提供了打包和发布的功能. 官方文档 https://py ...

  5. 新一代 Python 包管理工具来了!

    作者:费弗里 来源:Python 大数据分析 " 阅读本文大概需要 4 分钟. " 1 简介 说起Python的包管理工具,大家第一时间想到的肯定是pip.conda等经典工具.但 ...

  6. linuxpip安装python包_Windows+Linux安装Python包管理工具pip

    Windows+Linux安装Python包管理工具pip Windows安装Python包管理工具pip pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_in ...

  7. CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

    之前有的朋友问我,CentOS版本怎么安装python的pip,我之前给出的Ubuntu下apt-get的方法 ubuntu 需要先安装下pip吧, apt-get install python-pi ...

  8. python模块版本管理工具_【转】Python包管理工具

    Python 包管理工具解惑 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供m ...

  9. Pipenv – 超好用的 Python 包管理工具 1

    pipenv 是什么 pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv.pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer. 我们知道, ...

  10. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

最新文章

  1. C# “不支持给定路径的格式”异常处理
  2. Oracle日期转换处理
  3. 一起谈.NET技术,C#权限管理和设计浅谈
  4. 天猫11.11:搜索引擎实时秒级更新(转载)
  5. 为什么物理不能理解爱情?
  6. 【kafka】支持超高并发的kafka网络设计
  7. doc命令操作数据库(下)
  8. docker 升级版本
  9. sim800a指令_SIM900A 各功能指令 详细版
  10. 华数机器人旋转编程_华数机器人离线编程软件简介与InteRobot2018 新增功能
  11. 手把手教你电脑下载b站视频
  12. 计算机功能转动怎么设定,win7如何使用屏幕旋转功能 电脑使用屏幕旋转功能操作方法...
  13. 【狂神说Java】SpringBoot最新教程IDEA版通俗易懂
  14. 美的楼宇科技荆州工厂正式投产;华为加入国际电联P2C数字联盟 | 美通企业日报...
  15. 色彩RGBA值写作代码
  16. jQuery悬浮菜单
  17. 第六章 半导体存储器【微机原理】
  18. rust 安装与学习所遇到的部分问题
  19. 2021年危险化学品经营单位主要负责人考试及危险化学品经营单位主要负责人考试试卷
  20. 数字世界的积木-从MOS管搭反相器,与非门,锁存器,触发器

热门文章

  1. fglrx 9.8与kernel 2.6.30
  2. ASP基础教程之ASP AdRotator 组件的使用
  3. Checksum 校验和
  4. MySQL step by step 安装实战
  5. (30)SPI接口调试丢数据解决(FPGA不积跬步101)
  6. (88)FPGA乘法器设计(移位相加乘法器)
  7. (88)FPGA二分频设计,面试必问(十二)(第18天)
  8. 台式电脑桌面没有计算机,台式电脑开机后屏幕没显示怎么解决?
  9. 我喜欢c语言用英文版,说说我喜欢英语的几个理由
  10. C++ 关于复制、移动构造函数和移动、复制 赋值运算符的重载问题;