# 今日作业: # p1.简述 # 什么是模块 #一系列功能的集合体 # 模块有哪些来源 # p1.内置 # 2.第三方 # 3.自定义 # 模块的格式要求有哪些 # p1 .py文件 # 2 已被编译为共享库或DLL的C或C++扩展 # 3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) # 4 使用C编写并链接到python解释器的内置模块 # 2.定义一个cuboid模块,模块中有三个变量长(long)宽(wide)高(high),数值自定义,有一个返回值为周长的perimeter方法,一个返回值为表面积的area方法 # import cuboid as cd # print(cd.perimeter()) # print(cd.area()) # 3.定义一个用户文件stu1.py,在该文件中打印cuboid的长宽高,并获得周长和表面积,打印出来 # import cuboid # print(cuboid.long) # print(cuboid.wide) # print(cuboid.high) # print(cuboid.perimeter()) # print(cuboid.area()) # 4.在stu2.py文件中导入cuboid模块时为模块起简单别名,利用别名完成第3题中完成的操作 # import cuboid as cd # print(cuboid.long) # print(cuboid.wide) # print(cuboid.high) # print(cuboid.perimeter()) # print(cuboid.area()) # 5.现在有三个模块sys、time、place,可以在run.py文件导入三个模块吗?有几种方式?分别写出来 # # 6.结合第2、3、4题完成from...import...案例,完成同样的功能 # # 7.比较总结import与from...import...各自的优缺点 # import导入模块:在使用时必须加上前缀:模块名. # 优点: 指名道姓地向某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突 # 缺点: 但凡应用模块中的名字都需要加前缀,不够简洁 # from...import... # 优点: 使用时,无需再加前缀,更简洁 # 缺点: 容易与当前名称空间中的名字冲突 # # # # 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 # # 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式 login_status={'user':None,'status':False} def auth(type='file'): def auth1(func): def wrapper(*args,**kwargs): if login_status['user'] and login_status['status']: return func(*args,**kwargs) if type=='file': with open('db1.txt',mode='r',encoding='utf-8') as f: dic=eval(f.read()) name=input('用户名:') pwd=input('密码:') if name==dic['name'] and pwd==dic['password']: login_status['user'] = name login_status['status'] = True res = func(*args, **kwargs) return res else: print('username or password error') return wrapper return auth1 # 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录 # import time,random # user={'user':None,'login_time':None,'timeout':0.0003} # def auth(func): # def wrapper(*args,**kwargs): # if user['user']: # time_out=time.time()-user['login_time'] # if time_out