模块分三种
    # 自定义模块
    # 内置模块 time re sys os
    # 第三方模块/扩展模块
# 自定义模块  *****
    # 模块的创建 导入 模块名
    # import
        # 模块的命名空间
        # 在导入模块的时候发生了什么?
            # 那么这个模块的名字能够找到这个模块所在的内存空间,任意使用里面的名字
        # 为模块起别名  as
        # 导入多个模块
    # from import
        # 模块的命名空间
        # 在导入模块的时候发生了什么?
            # 只导入模块中的某一个名字,其他没有导入的不能直接使用
        # 为模块起别名 as
        # 导入多个名字
            # 可以 from 模块 import 名字1,名字2
            # 也可以 from 模块 import *  一般情况下不用
                # *和__all__
    # 模块的循环引用 - 一定会报错
    # 模块的加载与修改(了解)
        # import importlib
        # importlib.reload(模块名)
    # 把模块当做脚本来执行(*****)
        # if __name__ == '__main__'下面的代码只有在直接执行这个文件的时候才被执行
    # 模块搜索路径
        # sys.path
        # 第一个元素 是你当前执行的py文件所在的目录
        # 所以同目录下的py文件的导入都不会报错
        # 如果要导入的文件不是同目录下的,需要自己修改sys.path目录
# 包 ***
    # 导入模块 常用的
        # import
        # from import
    # 导入包
        # __init__文件  在导入包的时候执行这个包下的__init__方法
        # 绝对导入,永远要注意路径的问题
        # 相对导入,永远不要直接执行使用了相对导入的文件
        # __all__和* 也不是完美的,但是可以简化你的操作
# 软件的开发规范 *****
    # 选课系统
    # ftp
2 模块的创建
# 注意 模块名 需要符合变量命名规范
# 导入模块的时候,pycharm的报错提示是不可靠的
# 导入一个模块 就是import 文件名 不带.py
import my_module  # 导入模块
3模块的导入
1.模块导入的过程到底做了哪些事?
# 相当于执行了这个被导入的py文件
# 这个模块不会被重复导入
# import sys
# print(sys.modules)
# 内存中所有被导入的模块都会存储在sys.modules字典中
# 这个字典的key是这个模块的名字,value是这个模块的内存地址
# import my_module
# print(sys.modules['my_module'])
# print(my_module)
# 模块导入之后 可以直接使用这个模块中的函数 和 变量
# print(my_module.flag)
# my_module.read1()
# my_module.read2()
#
# def read2():
#     print('in my read2')
# flag = False
# my_module.read2()
# 模块的命名空间
    # 每一个模块的导入都会创建一个属于自己的命名空间
# 在导入模块的时候发生了什么?
    # 1.创建一个属于这个模块的命名空间
    # 2.执行这个模块中的代码
    # 3.创建一个引用来调用这个模块命名空间中的名字
    # 4.把导入的模块和内存地址存到sys.modules中
# import my_module as m
# 可以给导入的模块进行重命名,重命名之后新的名字会出现在内存空间中来作为模块的引用
# 但是原模块名就不能在文件中使用了
# import configparser as conf
# m.read2()
# 序列化
# json pickle
# 你提供序列化功能,帮助用户对***进行序列化
# def dump(somthing,m = 'json'):
#     if m == 'json':import json as m
#     else:import pickle as m
#     m.dumps(somthing)
# 数据库
# oracle oracle_db
# mysql mysql_db
# if db_name == 'mysql':# import mysql_db as db
# elif db_name == 'oracle': import oracle_db as db
# db.connect()
# db.exec()
#  导入多个模块
# 1.都写在文件的开始
# 2.顺序: 先导入内置的,再导入扩展的,最后导入自定义的
import os
import sys
import flask    # 扩展的web框架
import requests # 请求url
import my_module
# 3.导入多个模块
# import os as o,sys as s,flask as f
# os.remove()
# sys.path
4

import my_module
# 导入这个模块 相当于执行一个模块
# 导入模块 模块名作为这个模块命名空间的一个引用
# 可以使用模块名 随意的使用这个命名空间中的名字
# from my_module import flag
# from import 仍然会在导入模块的时候执行整个模块
# 仍然会把模块中所有的名字存在一个属于这个模块的命名空间中
# 区别在于 使用模块中名字的时候不需要再带着模块名
# 而是 导入了 什么名字 就能用什么名字
# 没有导入的名字不能使用
# flag = False
# print(flag)
# read2()
# my_module.read1()
# 都会完整的执行这个my_module文件
# 没被导入的其他名字就不能用了
# 导入多个名字和重命名语法
# from my_module import flag as f,read1 as r1
# from my_module import read2
# read2()
# print(f)
# from my_module import *  #==>from my_module import flag,read1,read2
# print(flag)
# read1()
# 如果你导入一个模块 这个模块中假设有20个方法
# 你只用一个 from 模块 import 这个方法
# 你用10个   import 模块
# from import *
# def time():
#     print('time.time')
# from my_module import *
# time()
from my_module import read2
read2()
# __all__只和*相关
# 如果不定义__all__,默认*可以导入这个模块中的所有名字
# 如果定义了__all__,那么只有出现在all这个列表中的名字可以被*导入
5模块的改 没啥意思
import time
import importlib
import my_module
print(my_module.flag)
time.sleep(20)
importlib.reload(my_module)   # 测试
print(my_module.flag)
7吧模块当成脚本执行
from my_module import login
# __name__是py文件中的一个内置的变量
    # 当你直接执行这个py文件的时候,这个文件中的__name__就是'__main__'
    # 当你以模块的形式导入这个py文件的时候,这个文件中的__name__就是模块名的字符串
# __file__
if __name__ == '__main__':
    # 写在这段代码下面的所有内容只有在当前py文件被直接run的时候才会执行
    # 被导入的时候不会被执行
    pass
# main # table会自动补全
# 脚本 : 就是一个被直接执行run的文件
8模块搜索路径
# import sys
# print(sys.path)
# 导入模块的时候,从这个列表中的目录下去找
# sys.path.append(r'E:\sylar\python_workspace\day31\homework')
# import core
# core.login()
9  包 
# 要使用get方法 得先导入policy
# import glance.api.policy  #只能也必须精确到模块
# glance.api.policy.get()
# import glance.api.policy  as policy  #只能也必须精确到模块
# policy.get()
# from glance.api import policy
# policy.get()
# 如果导入的是一个包的名字而不是一个py文件的名字
# 就会直接执行这个包下面的__init__.py
# 除此之外什么也不会做
import sys
# print(sys.path)
# import glance  # -->init-->import api
# glance.api.policy.get()
import glance
# 使用相对导入,不能直接执行使用了相对导入的文件
# 必须将这个存在着相对导入的包作为一个整体来使用
# 只有你写了一个包
# 这个包对外提供功能,而不是用来直接执行这个包中的某个py文件的时候才会用到相对导入

转载于:https://www.cnblogs.com/daien522556/p/9325236.html

day31 模块 与包相关推荐

  1. python规范模块和包

    主要内容: 1.模块 2.包 1.模块 模块分为三种: 1)内置模块 2)扩展模块 3)自定义模块 3)自定义模块 模块的创建 导入 模块名 创建: 1.  注意 模块名 需要符合变量命名规范 2.  ...

  2. python笔记6 模块与包 程序开发规范 包 re sys time os模块

    模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...

  3. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  4. Python中的类、模块和包究竟是什么?

    Python培训教程:Python中的类.模块和包究竟是什么?在Python和其他编程语言中,都有类似或相同的概念,如对象.类.模块.包,名称都是一样的,只不过会有细微的一些区别,正是因为有这些存在, ...

  5. python模块和包用法详解(__all__)

    1. 模块         Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句.         模块能定义函数,类和变 ...

  6. python类、模块、包

    通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块.包目录下为首的一个文件便是 __init__.py.然后是一些模块文件和子目录,假如子目录中也有 _ ...

  7. python入门是哪个包_python入门(十):模块、包

    模块:py文件 包:目录,目录里面包含__init__.py,内容可以是空 里面可以包含多个模块文件,还可以包含子包 1.模块和包,可以很方便的提供给其他程序以复用 1) 利于组织复杂工程 我们写代码 ...

  8. python哪里下载import包-【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

  9. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

  10. python 模块与包

    什么是模块? 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.即一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spa ...

最新文章

  1. 大数据+社会化协同 菜鸟不菜成老师
  2. 将数据、代码、栈放入不同的段
  3. 018:Django商城部署和数据库读写分离
  4. 用正则将html中的url提取,使用正则表达式从HTML中提取文本和链接
  5. Python求单词长度并根据长度排序
  6. 腾讯回应两块八卖《鬼谷八荒》:已下架并退款;iMac Pro 售完即停产;iCloud 识别姓氏闹乌龙 | 极客头条...
  7. php操作mysql数据库的扩展有哪些_PHP mysql 扩展库 操作mysql数据库步骤
  8. CentOS Yum 命令详解
  9. Linux: 多线程
  10. 【Spring学习笔记七】-Spring MVC基本配置和实例
  11. java蓝桥杯练习 学做菜
  12. MATLAB拟合函数使用说明
  13. 知乎创意总监、Dine 设计团队创始人 @disinfeqt :设计、音乐
  14. php 下载 xlsx
  15. Jsoup 解析Html源码实例
  16. 《编程之美》学习笔记
  17. tomcat的startup里为什么有突然多出来了一行这个NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-
  18. 立创EDA学习2-绘制原理图(初级)
  19. 坦克机器人自动照看你的秘密花园
  20. 使用Elasticsearch做一个简易的检索式聊天机器人

热门文章

  1. 一核一g负载均衡不能超过多少_多核程序设计(考试题)
  2. oracle index logging,index在logging什么?
  3. pip安装tensorflow_Tensorflow源代码编译踩坑若干
  4. C++ 语法概括总结
  5. linux 离线 nfs,Linux 系统 NFS服务
  6. opencv python 高斯滤波_Python OpenCV实验(3):实现图像的高斯滤波处理
  7. ubuntu字符界面login_关于Ubuntu循环登陆界面
  8. 【算法笔记】数论基础:康托展开(全排列和序号之间的映射)
  9. 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
  10. php上证指数抽奖代码,[高手指点] 美团网的抽奖是什么原理?