1 什么是模块?

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

但其实import加载的模块分为四个通用类别:

1 使用python编写的代码(.py文件)

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

3 包好一组模块的包

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

2),模块的执行:import,每个模块都是一个独立的名称空间。

模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句)。

3)1,from:而from 语句相当于import,也会创建新的名称空间,但是将my_moudle中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了。

1 from my_moudle import read1,read2

注意:

当你调用模块时,在你当前使用的页面中不能出现和模块,相同的对象,名称。

不然会存在一个覆盖的情况,而且当你覆盖以后,后面你调用的模块会永久失去效用,所以尽量不要取和模块相同的名称

PS:当你运行一个模块的时候,模块会先加载到内存,那个时候你是不能更改的,

2.from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置,

大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,

很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。

PS:from spam import *:是把所有的spam里的内容都加载到内存中,并且随时可以调用,而加载的位置是当前你输入这段代码的位置。

4)

考虑到性能的原因,每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块,

有的同学可能会想到直接从sys.module中删除一个模块不就可以卸载了吗,注意了,你删了sys.module中的模块对象仍然可能被其他程序的组件所引用,因而不会被清除。

特别的对于我们引用了这个模块中的一个类,用这个类产生了很多对象,因而这些对象都有关于这个模块的引用

importtime,importlibimportaa

time.sleep(20)#importlib.reload(aa)

aa.func1()

在20秒的等待时间里,修改aa.py中func1的内容,等待test.py的结果。

打开importlib注释,重新测试

结果:是不会改变,因为当你运行的时候,系统已经把代码加载到内存,在内存中是不会被修改的。

如果用reload的话,在reload()里面加的是被调用的模块名,另外在修改以后要ctrl + s保存一下,然后才能改。

5):__name__

我们可以通过模块的全局变量__name__来查看模块名:

当做脚本运行:

__name__ 等于'__main__'

当做模块导入:

__name__= 模块名

作用:用来控制.py文件在不同的应用场景下执行不同的逻辑

if __name__ == '__main__':

__name__:__name__在被调用的模块中,显示的是被调用模块的名字(比如:我被调用的模块名字是verw,那我调用的print(__name__)显示的是verw),而在调用的程序中显示的是__main__。

6):在定义一个变量名的时候,变量名尽量不要和内置函数,还有模块名重复,不然会产生错误。

7):包:含义以及注意事项。   (

相对路径在同一个包内部能用,专门提供给别人用。

绝对路径,是全部地方都能用,但是当里面的一个路径一遍就会全部改变,

所以相对来说,以后多用相对路径。

import *的,要用‘__all__’=‘ ’接收

)

1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

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

强调:

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

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

注意事项:1.关于包相关的导入语句也分为import和from ... import...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:

凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。3.对比import item 和from item importname的应用场景:

如果我们想直接使用name那必须使用后者。

2:包的调用-----绝对导入和相对导入

我们的最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以glance作为起始

相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py

在glance/api/version.py#绝对导入

from glance.cmd importmanage

manage.main()#相对导入

from ..cmd importmanage

manage.main()

注意:特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式。

PS:

也就是说,一个包内的两个不同文件,不要用import直接导入,因为a文件import另b文件的时候,其c文件就调用不了a。

(1)绝对导入:

也就是from导入,从一个包调用另一个包。

(2)相对导入:

也就是用.。和。。导入,。一个点的时候表示同级的目录,。。两个点的时候表示上一层目录。

PS:用.和..表示的时候,同一个包内是不能调用的,即使调用了也没有用。

8):Mysql与Oracle区别

1.  Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。

2. Oracle支持大并发,大访问量,是OLTP最好的工具。

3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

4.Oracle也Mysql操作上的一些区别

mysql榨包是什么意思_模块与包 Mysql与Oracle区别相关推荐

  1. python 模块 包 库_模块(包、库)

    模块的基本概念: 模块是程序,它就是一个扩展名为.py的python程序.因此对于一个.py的python文件而言,既可以把它当作程序来执行,也可以将它作为模块引入. 导入一个模块时,python解释 ...

  2. Python 进阶_模块 amp; 包

    目录 目录 模块的搜索路径和路径搜索 搜索路径 命名空间和变量作用域的比较 变量名的查找覆盖 导入模块 import 语句 from-import 语句 扩展的 import 语句 as 自动载入模块 ...

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

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

  4. nhibernate mysql配置_MySql(一)_利用NHibernate和MySql交互

    1.基础配置,添加MySql和nHibernate的引用 (1)   添加引用,导入MySql.data.dll:   利用MySql提供的API操作: (2) 添加引用,导入NHibernate.d ...

  5. mysql物理备份迁移注意细节_物理拷贝备份mysql到其他机器上恢复

    经常会遇到mysql数据要迁徙的情况 ,逻辑导出是可以的 但是就是太慢 第三方工具也同样可以用 也是操作麻烦,最简单粗暴的方式就是直接拷贝物理文件来的最快 也很简单 当然 前提是远程服务器和目标服务器 ...

  6. mysql计算机二级选择题题库_全国计算机二级mysql数据库选择题及答案

    全国计算机二级mysql数据库选择题及答案 选择题是全国计算机二级mysql考试里的送分题,下面小编为大家带来了全国计算机二级mysql数据库选择题及答案,欢迎大家阅读! 全国计算机二级mysql数据 ...

  7. mysql删除不安全的账户_【20200407】MySQL账号不规则删除导致权限错误

    环境 CentOS release 6.8 (Final) 5.6.29-log MySQL Community Server (GPL) IP地址: 10.10.10.10 现象描述 1.创建程序账 ...

  8. mysql数据库应用的权限层级_涂抹MySQL--第5章 MySQL数据库中的权限体系 - 5.3权限级别(1)...

    5.3 权限级别 总的来说,MySQL数据库的权限从大的粒度上划分可以分成5类:全局.数据库.表.列.程序.通过对这5个大类权限的细分,可以精确地为某个用户分配从某台机器连接进来访问某个数据库下某个表 ...

  9. ssis包部署到数据库_使用SSIS包将行标题和数据添加到平面文件中

    ssis包部署到数据库 In this article, we will configure an SSIS package to generate a composite output in the ...

最新文章

  1. envoy实现_网络通信与治理,谁更在行?Envoy 和 Nginx 对比 | 本月送书活动来啦
  2. php编写TCP服务端和客户端程序
  3. IntelliLight: a Reinforcement Learning Approach for Intelligent Traffic Light Control 论文阅读
  4. jni c向java传递数组_通过jni将jint数组从c返回到java
  5. 关于线程池ThreadPoolExecutor使用总结
  6. 7安装sql cent os server_CentOS7 安装并使用SQL Server
  7. ActiveMQ消息队列用法
  8. amd显卡更新最新驱动鼠标顿卡的解决方法
  9. 开源字体不香吗?五款 GitHub 上的爆红字体任君选
  10. PHP实现伪静态化页面的具体实现方式
  11. Zend Framework学习之验证ing
  12. 【语音处理】基于matlab音频信号FIR+IIR(高通+低通+带通)滤波器频谱分析【含Matlab源码 1732期】
  13. iOS 加载本地Gif图片
  14. 霍尼韦尔发力中国互联市场
  15. WAPI网络认证原理
  16. HTTP权威指南 - robots.txt文件
  17. 云呐|RFID资产盘点系统带审批(rfid库存盘点功能)
  18. C# 添加windows右键菜单
  19. VMWare 15虚拟机下载和安装说明兼容WIN10
  20. windows和linux系统文件目录

热门文章

  1. 音视频技术开发周刊 | 205
  2. HashMap源码解析(JDK1.8)
  3. Hadoop之InputFormat数据输入详解
  4. Java基础之重写与重载深入解析
  5. Fashion-MNIST 一周年 | Google NIPS最爱,还登上了Science
  6. VirtualBox下安装Ubuntu Server 16.04
  7. Intel Edision安装Android Things
  8. go 打印 %v %+v %#v 的区别
  9. idea配置连接oracle数据库的pom文件中添加什么?
  10. leetcode 415. 字符串相加(Java版)