python模块和包

一.模块

模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。
#在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 

  1 使用python编写的.py文件

  2 已被编译为共享库或DLL的C或C++扩展

  3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

  4 使用C编写并链接到python解释器的内置模块

通常意义的模块就是一个py文件

为什么使用模块

#1、从文件级别组织程序,更方便管理
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,
还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用 #
2、拿来主义,提升开发效率 同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率 #ps: 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,
需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

二.import

1.import只会执行一次

  使用import相当于将整个模块代码执行了一遍

  我们可以从sys.module中找到当前已经加载的模块,sys.module是一个字典,内部包含模块名与模块对象的映射,

  该字典决定了导入模块时是否需要重新导入。

2.被导入的模块有独立的命名空间

  2个模块都有同一变量名,test1.hello和test2.hello,不会有冲突

3.import test as t

  给模块起别名

4.一行导入多个模块

  

import sys,os,re

  

三.from...import...的使用

1 from spam import read1,read2
2 
3 #唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.
4 
5 #from...import...的方式有好处也有坏处
6     好处:使用起来方便了
7     坏处:容易与当前执行文件中的名字冲突
1 # 起别名
2 from spam import read1 as read
3 # 多个导入
4 from spam import read1,read2,money

  from xx import *

1 #from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置
2 
3 #大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。
4 #而且可读性极其的差,在交互式环境中导入时没有问题。
5 6 # 在模块文件最上声明 7 __all__=['money','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

四. __name__="__main__"

#编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用


#python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:__name__ 等于'__main__'
    当文件被当做模块导入时:__name__等于模块名

#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __name__ == '__main__':
1 # hello.py
2 def hello():
3     print("hello world")
4     
5 if __name__ == '__main__':
6     hello()
7 
8 # 只有执行hello.py文件时才会执行hello
9 # 被导入时不会执行hello

五.包

1.什么是包

#官网解释
Packages are a way of structuring Python’s module namespace by using “dotted module names”
包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

#具体的:包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来

#需要强调的是:
  1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

  2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

2.包的作用

包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来
随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,
我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

3.注意事项

#1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

#2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

#3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
原文地址:https://www.cnblogs.com/pantong/p/10499868.html