主要内容:

1.模块

2.包

1.模块

模块分为三种:

1)内置模块

2)扩展模块

3)自定义模块

3)自定义模块

模块的创建 导入 模块名

创建:

   1.  注意 模块名 需要符合变量命名规范

   2. 导入模块的时候,pycharm的报错提示是不可靠的

   3. 导入一个模块 就是import 文件名 不带.py

导入:

import 导入,

  1.相当于执行了这个被导入的py文件.  

  2. 这个模块不会被重复导入

  3.内存中所有被导入的模块都会存储在sys.modules字典中,注意这个字典的key是这个模块的名字,value是这个模块的内存地址.

import test,sys
print(sys.modules["test"])

4.模块导入之后,可以直接使用这个模块的函数和变量,使用示例如下:

import sys
import test
print(test.name)
test.A()

模块的命名空间

  每一个模块的导入都会创建一个属于自已的命名空间.

在导入模块的时候发生了什么?

  1. 创建一个属于这个模块的命名空间.

  2.执行这个模块中的代码 .

  3. 创建一个引用来调用这个模块命名空间中的名字

  4.把导入的模块和内存地址存到sys.modules中

给导入的模块重命名:

  import my_module as m

       1. 可以给导入的模块进行重命名,重命名之后新的名字会出现在内存空间中来作为模块的引用

  2.但是原模块名就不能在文件中使用了

导入多个模块:

  要注意两点:

  1. 都写在文件的开始

  2.顺序:先导入内置的,再导入扩展的,然后再导入自定义的.

from import 导入:

  1. 和import一样,这个导入,相当于执行这个模块.

  2. 仍然会把模块中所有的名字存在一个属于这个模块的命名空间中.

  3.区别在于使用模块中的名字时候,不需要再带着模块名.而是导入了什么名字就能用什么名字

  4.没有导入的名字不能使用.

       导入多个名字和重命名语法:

    from my_module import flag as f,read1 as r1

  如果模块中的方法和变量较多的话,可以用下面的方法:

    from my_module import * 

    这个是导入所有的变量和方法(不推荐使用,可能会对本程序照成干扰.)照成干扰的示例如下:

# from import *
# def time():
#     print('time.time')
# from my_module import *
# time()

   from modules import * 和__all__的关系.

    如果导入的模块中有__all__那么from modules import * 时,这个*只表示__all__指定的内容的.

    

# __all__只和*相关
# 如果不定义__all__,默认*可以导入这个模块中的所有名字
# 如果定义了__all__,那么只有出现在all这个列表中的名字可以被*导入

模块的加载和修改:

  模块的一旦导入,模块的内容就在内存当中,此时你再修改文件是没有效果的.除非您用下面的方法.

  

import time
import importlibimport test
print(test.name)
time.sleep(20)
importlib.reload(test)   # 测试
print(test.name)

把模块当脚本执行

# __name__是py文件中的一个内置的变量,如果单独执行这个py文件,__name__值为__main__,如果这个py文件被其他文件导入的话,那么__name__ 就是这个文件名了.

# __name__是py文件中的一个内置的变量
# 当你直接执行这个py文件的时候,这个文件中的__name__就是'__main__'
# 当你以模块的形式导入这个py文件的时候,这个文件中的__name__就是模块名的字符串
# __file__

if __name__ == '__main__':
# 写在这段代码下面的所有内容只有在当前py文件被直接run的时候才会执行
# 被导入的时候不会被执行
pass

# main # table会自动补全

模块搜索路径:

导入模块后,是通过import sys, sys.path里面的路径来搜索模块的,如果没有就会报错.

# import sys
# print(sys.path)
# 导入模块的时候,从这个列表中的目录下去找
# sys.path.append(r'E:\sylar\python_workspace\day31\homework')
# import core
# core.login()

包:

  带着__init__.py的文件夹就是包.包里面可以放很多文件和文件夹.

  参考如下

目录截图如上,如果在测试.py中想导入policy.py文件引用里面的get()函数的话,

1.可以用import 来导入,如下:

import glance.api.policy   #注意只有为包时,才能用.导入
glance.api.policy.get()或者如下导入import  glance.api.policy  as policy   #注意这里只能也必须精确到模块policy.get()

2.用from import来导入,参考如下:

from glance.api import policy
policy.get()

import 导入时凡是导入时带点的,点的左别都必须是一个包.

from import导入时必须是明确的一个不能带点的,否则会有语法错误.比如from mymodule import b.c会报错

import 包时,如果导入的是一个包的名字而不是一个py文件的名字.就会直接执行这个包下面的__init__.py除此之外什么也不会做.

关于包的绝对导入:

   比如上图,我这里导入import glance,为了能调用get()方法,那么我需要在glances的__init__.py里面加入from glance import api 以及api的文件夹的__init__.py文件里面加入from glance.api import policy.   这个的问题是,如果glance换个目录的话,那么__init__.py里面的值就要更改.

关于包的相对导入:

       还是上面的问题,如果是相对导入的话,__init__.py里的内容可以改为from .  import api 和  from .  import policy.

但是使用相对导入,不能直接执行使用了相对导入的文件.# 必须将这个存在着相对导入的包作为一个整体来使用.

# 只有你写了一个包
# 这个包对外提供功能,而不是用来直接执行这个包中的某个py文件的时候才会用到相对导入

关于包导入的时的*和__all__问题:

glance/                   ├── __init__.py     from .api import *from .cmd import *from .db import *
├── api                  │   ├── __init__.py   __all__ = ['policy','versions'] │   ├── policy.py│   └── versions.py├── cmd               __all__ = ['manage']    │   ├── __init__.py│   └── manage.py    └── db                __all__ = ['models']              ├── __init__.py└── models.pyimport glance
policy.get()import glance

  

转载于:https://www.cnblogs.com/ahliucong/p/9325225.html

python规范模块和包相关推荐

  1. python基础---模块与包

    1.模块导入方法 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,导入模块可以实现功能的重复利用 import加载的模块分为四个通用类别: 1 使 ...

  2. Python中 模块、包、库

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  3. Python 之 模块和包

    模块和包 目标 模块 包 发布模块 模块 1.1 模块的概念 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块 模块名 同样也是一个 ...

  4. Python 基金会 —— 模块和包简介

    一.模块(Module) 1.模块的作用      在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...

  5. 25 Python之模块与包

    一.模块 模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/ 模块的分类: 1.使用python编写的py文件 2.已被编译位共享库或者DLL或C或者C++的扩展 ...

  6. python 必备模块和包_量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二)...

    量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二) 21)如何在Python中复制对象? 要在Python中复制对象,可以尝试copy.copy()或copy.deepcop ...

  7. Python基础——模块和包详解以及pip操作模块和包的指令

    随着项目越来越大,所有代码都放在一个文件中,已经不能满足我们的需求了.这时候就要将代码进行整理了,模块和包的出现就是为了解决这个问题的.模块可以将一些相关联的代码组合在一个py文件中,包可以将一些相关 ...

  8. Python之模块,包,文件,异常

    目录 前言 模块 模块,包导入 文件 异常 高阶函数 后记 前言 在我们之前的学习中,做测试是不会有第二个py文件的,那么就不太了解一个py文件是代表着什么,是否跟java编程中的.java文件有什么 ...

  9. 深入理解并使用python的模块与包

    模块 编写好的一个python文件可以有两种用途: 1)脚本,一个文件就是整个程序,用来被执行 2)模块,文件中存放着一堆功能,用来被导入使用 模块的分类 1)开发者编写的 .py文件 2 ) 由C或 ...

最新文章

  1. JPA单向一对多更新问题
  2. [转]通过脚本添加登陆/注销/开机/关机脚本
  3. Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜
  4. 射影几何笔记5:齐次坐标(Homogeneous coordinates)
  5. HBase数据模型:rowkey timestamp 列族 cell
  6. python 学习笔记二 搭建ftp服务器
  7. ECMAScript 6环境搭建
  8. 2016年10个重要的可视化发展
  9. 20190913:(leetcode习题)罗马数字转整数
  10. vcpkg安装和使用--学习入门
  11. 腾讯云服务器安全吗?来说说
  12. 搭建简单的企业网站,华为云速建站和阿里建站哪个好?
  13. 通过cv2.resize()来改变图片大小
  14. 历史上的今天:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史
  15. 获取安卓手机中APP包名的几种方式
  16. PR AE安装成功后启动卡死的解决
  17. Lua 编程学习笔记
  18. [19]python uniform() 函数
  19. 解决禅道升级报错:Column not found: 1054 Unknown column 'readme' in 'zt_im_client'
  20. “xxx”does not name a type 错误

热门文章

  1. hibernate4中主要的配置文件配置
  2. 转载:给自己一个警示
  3. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) Python 版
  4. 那些年我踩过的关于layui表格的坑
  5. 我的 IDEA 使用 配置策略
  6. 只靠可视化大屏,做不了数字化,阿里总监总结3点,你做到了几个
  7. 国内外主流BI工具介绍和点评
  8. 使用 RandomStringUtils 类来生成随机码/随机数
  9. 一键加速去不掉加锁的_十年斑点去不掉,大妈巧用蜂蜜擦脸,皮肤白净还年轻...
  10. 未封装的扩展程序是什么意思_“冰壶见底未为清,少年如玉有诗名”这句诗是什么意思?...