模块和包

一、
1、有些时候代码的可读性差,且重复的代码多,写代码困难大
然后我们就将一些复杂的需要重复使用的功能进行归类,分别放到同一个py文件中。
需要调用的时候直接拿来用就可以了。--- 就产生了模块(其实就是py文件)
2、导入模块
①、是先看自己内存有没有,没有的话再引入。
②、创建一个命名空间,在这个命名空间中执行代码
③、创建了一个xiaomei这个名字,给命名空间中变量和xiaomei绑定在一起
④、import方式导入模块中的内容和自己文件中的内容不会冲突
def drive():pass
xiaomei.drive()      #执行模块里的函数
print(xiaomei.price)
注意:依赖倒置原则。(模块之间不能互相调用--单项调用)
3import...as:给模块重命名,重命名之后之前的名字就失效了,新名字可以直接使用
import xiaomei as xm  #import的名字太长我嫌弃
xm.drive()     # 得到原xiaomei中的内容
import xiaomei as xm   #当import的模块和我文件中的变量重名的时候
def xiaomei():
    print(123)
xiaomei()              # 得到当前文件的 内容  # 123
3.1应用实例:
if 是mysql数据库:    #当兼容多个模块的相同操作的时候
    import mysql as db
elif 是oracle数据库:
    import oracle as db
db.open
db.write       
4import多个模块
importos,re,time# 就这一句话
os.getcwd() / re.findall() / time.time() # 这样就可以用了
①但最好是如下一个一个引用:
import os
import re
import time
②导入顺序:
先导入内置的模块
再导入扩展模块 :requests beautifulsoup django selenium paramiko
最后导入自定义的模块
③调用模块中的个别方法:
from xiaomeiimportdriveasd,priceasp
from import的用法 会直接将导入的内容放在全局,
但是dirve中用到的变量和drive方法是一种绑定关系
如果有同名,就会发生覆盖
1、import xiaomei (比较好)
2、from xiaomeiimport* # 调用模块中所有方法
# (不太好,因为如果有500个全部引用?)所以就出现了 __all__
xiaomei模块:
price = '三十块钱一位'
def drive():
    print('快上车')
    print(price)
def login():
    print('login ')
如果在文件开始设置__all__ = ['drive'] ,则别的文件用 * 时,只能调用只drive
3、from xiaomeiimportdrive,price (好)
5、如果在 xiaomei 这个模块中有 print(),则一调用就会打印,为了避免这个,所以就出现了:(下面这个是xiaomei模块的内容)
def login():
    print('login ')
if __name__ == '__main__':  #
    login()
    print('小司机')        # login\n   小司机
print(repr(__name__))        #  '__main__'   (所以调用的时候name是xiaomei就进入不了 if 中 所以就不打印。)
6、这个题的意思就是说,(玩,不重要)
①、内置模块在启动程序的时候就已经加载到内存了,再定义一个time模块,并不会怎么样(re模块特殊)
②、例如xiaomei模块在这个程序等的十秒钟里,改变了内容,不会改变!但是加上了( importlib.reload)这个,相当于重新加载一次就会改变!
import time,importlib
import xiaomei
xiaomei.drive()
time.sleep(10)
# importlib.reload(xiaomei)       
print('price : ',xiaomei.price)

二、这个不懂!!!
import re
import sys
print(sys.modules)
print(sys.path)
----------------------------------------------------
执行python解释器,已经在内存中加载了一些内置的模块了
导入模块的时候,如果模块不存在在sys.modules,才从sys.path给的路径中依次去查找
sys.path完全可以决定某个模块能不能被找到(除了已经在内存中加载的一些内置模块)
------------------------------------
import xiaomei
当一个py文件被当做一个模块导入的时候,会自动生成一个pyc文件
pyc文件是这个代码编译之后的文件,节省了每一次导入代码之后还要编译的时间
--------------------------------------------------------
import xiaomei
print(dir(xiaomei))
--------------------------------------------------------
import builtins
print(dir(builtins))
三、包
from glance.apiimportpolicy,versions
policy.get()
在包中使用模块,就是一直...直到找到模块,import就行了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章