模块与包

模块

什么是模块?
    模块就是一组功能的集合体,程序可以导入模块来复用模块里的功能。
    
    模块分为:
          1.内置模块
          2.第三方模块
          3.自定义模块(一个Python文件就是一个模块,文件名为m..py 模块名为m)
     内置模块与第三方模块都是可以直接使用的,不需要定义
     自定义模块 是我们自己定义我们可以把程序中共用的功能提取出来定义为一个模块大家可以
共享,好处就是可以减少重复代码,相同部分导模块就可以了,这样程序组织清晰,可读性强。 为什么要使用模块?
1.方便我们管理代码,逻辑组织清晰 2.拿来主义,提升开发效率 如何用模块? 导入模块名字,导入的过程会产生名称空间,运行过程中产生的名字都会丢到名称空间中。 引用: 1.模块名.名字指名道姓的问某一个模块名字对应的值. 2. 无论是修改还是查看都是模块本身,与调用位置无关
一个Python文件两种用途:
      1.被当做程序运行
      2.被当做模块导入

使用模块

import的使用
 import 导入模块使用时要加前缀
优点:不会与当前空间的名字冲突(被导入的模块都有独立的名称空间)
缺点:麻烦要加前缀
import导入发生的事情:
1.产生名称空间
2.运行过程中产生的名称空间都丢到模块名称空间中
3.模块名称空间是一个独立的空间,所以名字与当前空间冲突也没事

给模块起别名用as
为已经导入的模块起别名的方式对编写可扩展的代码很有用

一行可以导多个模块
import os,sys,multiprocessing
from ... import...的使用

from spam import read1,read2

from...import 与import的对比
    好处:使用起来方便了(使用时不用加前缀)
    坏处:容易与当前执行文件中的名字冲突
form....import导入发生的事情:
1.产生名称空间
2.运行过程中产生的名称空间都丢到模块名称空间中
3.当前名称空间会得到一个名字,该名字与模块中的名称空间的
某一地址一致所以,这个两个名字容易混淆,因为不是独立的空间.

也支持as

 from spam import read1 as read

一行导入多个名字

from spam import read1,read2,money

from...import *
*表示导入所有模块,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。
而且可读性极其的差,在交互式环境中导入时没有问题。

查找模块的优先级

1.内存
2.硬盘(按照存放的顺序查找)

什么是包?
包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的
就是为了用文件夹将文件/模块组织起来
(包只是模块的一种形式而已,包的本质就是一种模块)

为什么要包?
包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来,随着模块越来越多,
包可以提高程序的结构性和可维护性 怎么用包? glance
/ #Top-level package ├── __init__.py #Initialize the glance package ├── api #Subpackage for api │ ├── __init__.py │ ├── policy.py │ └── versions.py ├── cmd #Subpackage for cmd │ ├── __init__.py │ └── manage.py └── db #Subpackage for db ├── __init__.py └── models.py

强调:

1.无论import,from....import导入时点左边必须是包,否则会报错
2.包A 与包B同名模块也不会冲突,因为来自不同的空间
3.import导入文件产生的名称空间的名字来源文件
 import包 产生的名称空间来源于包下的__init__,导包就是导文件

 

posted @ 2020-04-26 07:10  zhw_sylvia  阅读(138)  评论(0)    收藏  举报