day22 模块最后的补充。包。
前一天内容复习:
# def func(): # a # # def main(): # func() # # try: # main() # except: # pass # raise NameError # try: # raise TypeError('类型错误') # except TypeError as e: # print(e) # class EvaException(BaseException): # def __init__(self,msg): # self.msg=msg # def __str__(self): # return self.msg # # raise EvaException('类型错误') # assert 1==2 #if 1==2: # 一个程序的执行 必须满足某些条件 不满足 完全不能执行了 # if 1==2: # print('*'*123) #try except #finally
今天内容概要:模块内容的最后补充。包。
模块:
#什么是模块? python代码的文件 #1.py文件 ***** #2.包 *** #3.内置的模块 # import re # re.findall() # def findall(): # pass #代码的可读性差,且重复的代码多,写代码困难大 #将一些复杂的需要重复使用的功能进行归类,分别放到同一个py文件中。 # 需要调用的时候直接拿来用就可以了。 # import xiaomei #一、导入模块时做的事 #1.看看自己的内存里有没有 #有就不干活,没有再倒进来 #2.创建一个命名空间,在这个命名空间中执行代码 #3.创建了一个xiaomei这个名字,给命名空间中变量和xiaomei绑定在一起 #4.import方式导入模块中的内容和自己文件中的内容不会冲突 def drive():pass # xiaomei.drive() #执行模块里的函数 # print(xiaomei.price) #二、import ... as:给模块重命名,重命名之后之前的名字就失效了,新名字可以直接使用 # import xiaomei as xm #import的名字太长我嫌弃 # xm.drive() # import xiaomei as xm #当import的模块和我文件中的变量重名的时候 # def xiaomei(): # print(123) # xm.drive() # if 是mysql数据库: #当兼容多个模块的相同操作的时候 # import mysql as db # elif 是oracle数据库: # import oracle as db # db.open # db.write #三、import 多个模块 # import os,re,time # # os.getcwd() # re.findall() # time.time() # import os # import re # import time # # import requests # # import xiaomei #先导入内置的模块 #再导入扩展模块 :requests beautifulsoup django selenium paramiko #最后导入自定义的模块 # from xiaomei import drive,price # from xiaomei import drive as d,price as p # from import的用法 会直接将导入的内容放在全局, # 但是dirve中用到的变量和drive方法是一种绑定关系 # 如果有同名,就会发生覆盖 # drive() # import xiaomei # from xiaomei import * # from xiaomei import drive,price # drive() # print(price) #from .. import * #*受到__all__的限制,如果不定义__all__就默认引入所有 #如果定义了,那么列表中有什么,就能引入什么 # import time,importlib # import xiaomei # xiaomei.drive() # time.sleep(10) # importlib.reload(xiaomei) # print('price : ',xiaomei.price) # from xiaomei import price # print(price) import xiaomei # 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))
包:
#什么是包:一群模块文件的集合+__init__ #py2 : 必须有__init__ #py3:不是必须的了 # import os # os.makedirs('glance/api') # os.makedirs('glance/cmd') # os.makedirs('glance/db') # l = [] # l.append(open('glance/__init__.py','w')) # l.append(open('glance/api/__init__.py','w')) # l.append(open('glance/api/policy.py','w')) # l.append(open('glance/api/versions.py','w')) # l.append(open('glance/cmd/__init__.py','w')) # l.append(open('glance/cmd/manage.py','w')) # l.append(open('glance/db/models.py','w')) # map(lambda f:f.close() ,l) # from glance.api import policy,versions # policy.get() #在包中使用模块,就是一直...直到找到模块,import就行了