时间:2021-07-01 10:21:17 帮助过:26人阅读
- <span style="font-size: 16px"><strong> 1 from my_moudle import read1,read2<br><br><br></strong></span>
- <span style="color: #000000">注意:
- 当你调用模块时,在你当前使用的页面中不能出现和模块,相同的对象,名称。
- 不然会存在一个覆盖的情况,而且当你覆盖以后,后面你调用的模块会永久失去效用,所以尽量不要取和模块相同的名称<br><br><br><br>PS:当你运行一个模块的时候,模块会先加载到内存,那个时候你是不能更改的,</span>
- <span style="font-size: 16px"><strong>2.from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置,<br>大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,<br>很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。<br></strong></span>
- <span style="color: #000000">PS:
- </span><span style="color: #0000ff">from</span> spam <span style="color: #0000ff">import</span> *:是把所有的spam里的内容都加载到内存中,并且随时可以调用,而加载的位置是当前你输入这段代码的位置。
4)
考虑到性能的原因,每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块,
有的同学可能会想到直接从sys.module中删除一个模块不就可以卸载了吗,注意了,你删了sys.module中的模块对象仍然可能被其他程序的组件所引用,因而不会被清除。
特别的对于我们引用了这个模块中的一个类,用这个类产生了很多对象,因而这些对象都有关于这个模块的引用
- <span style="color: #0000ff">import</span><span style="color: #000000"> time,importlib
- </span><span style="color: #0000ff">import</span><span style="color: #000000"> aa
- time.sleep(</span>20<span style="color: #000000">)
- </span><span style="color: #008000">#</span><span style="color: #008000"> importlib.reload(aa)</span>
- <span style="color: #000000">aa.func1()
- 在20秒的等待时间里,修改aa.py中func1的内容,等待test.py的结果。
- 打开importlib注释,重新测试<br><br><br>结果:是不会改变,因为当你运行的时候,系统已经把代码加载到内存,在内存中是不会被修改的。<br><br>如果用reload的话,在reload()里面加的是被调用的模块名,另外在修改以后要ctrl + s保存一下,然后才能改。</span>
5):__name__
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
__name__ 等于‘__main__‘
当做模块导入:
__name__= 模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == ‘__main__‘:
- <span style="color: #800080">__name__</span><span style="color: #000000">:
- </span><span style="color: #800080">__name__在被调用的模块中</span>,显示的是被调用模块的名字(比如:我被调用的模块名字是verw,那我调用的print(<span style="color: #800080">__name__</span>)显示的是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. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块
- <span style="color: #000000">注意事项:
- </span>1.关于包相关的导入语句也分为import和from ... <span style="color: #0000ff">import</span><span style="color: #000000"> ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:<br>凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。
- </span>2<span style="color: #000000">.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
- </span>3.对比import item 和from item <span style="color: #0000ff">import</span><span style="color: #000000"> name的应用场景:
- 如果我们想直接使用name那必须使用后者。</span>
2:包的调用-----绝对导入和相对导入
- <span style="color: #000000">我们的最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:
- 绝对导入:以glance作为起始
- 相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
- 例如:我们在glance</span>/api/version.py中想要导入glance/cmd/manage.py
- <span style="color: #000000">
- 在glance</span>/api/<span style="color: #000000">version.py
- </span><span style="color: #008000">#</span><span style="color: #008000">绝对导入</span>
- <span style="color: #0000ff">from</span> glance.cmd <span style="color: #0000ff">import</span><span style="color: #000000"> manage
- manage.main()
- </span><span style="color: #008000">#</span><span style="color: #008000">相对导入</span>
- <span style="color: #0000ff">from</span> ..cmd <span style="color: #0000ff">import</span><span style="color: #000000"> manage
- manage.main()
- <br></span>
注意:特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式。
- <span style="color: #000000">PS:
- 也就是说,一个包内的两个不同文件,不要用import直接导入,因为a文件import另b文件的时候,其c文件就调用不了a。</span>
(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与Oracle区别
标签:span 部分 函数 报错 否则 控制 python2 通过 卸载