python_装饰器——迭代器——生成器
2019-01-22 02:01:00来源:博客园 阅读 ()
一、装饰器
1、什么是装饰器? 器=》工具,装饰=》增加功能 1、不修改源代码 2、不修改调用方式 装饰器是在遵循1和2原则的基础上为被装饰对象增加功能的工具 2、实现无参装饰器 1、无参装饰器的模板 def outter(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) return res return wrapper 2、使用:在被装饰对象正上方单独一行 @无参装饰器名 def foo(): pass 3、实现有参装饰器 1、有参装饰器的模板 def outter2(x,y,z): def outter(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) return res return wrapper return outter 2、使用:在被装饰对象正上方单独一行 @有参装饰器名(1,2,3) def foo(): pass
二、迭代器
#1、什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 # while True: # print('=------->') # l={'x':1,'y':2} # n=0 # while n < len(l): # print(l[n]) # n+=1 #2、要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象? #可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象 num=1 #以下都是可迭代的对象 # str1='hello' # list1=[1,2,3] # tup1=(1,2,3) # dic={'x':1} # s1={'a','b','c'} # f=open('a.txt','w',encoding='utf-8')
三、生成器
#生成器: # 函数内包含有yield关键字, # 再调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象 def chicken(): print('=====>first') yield 1 print('=====>sencond') yield 2 print('=====>third') yield 3 obj=chicken() # print(obj) # 生成器本质就是迭代器,也就是说生成器的玩法其实就是迭代器的玩法 # print(obj.__iter__() is obj) # res=obj.__next__() # print(res) # # res1=obj.__next__() # print(res1) # # res2=obj.__next__() # print(res2) # # obj.__next__() # 1、iter_obj=obj.__iter__(),拿到迭代器 #2、出发iter_obj.__next__(),拿到该方法的返回值,赋值给item #3、周而复始,直到函数内不在有yield,即取值完毕 #4、for会检测到StopIteration异常,结束循环 # for item in obj: # print(item) #总结yield: #1、为我们提供了一种自定义迭代器的方式, # 可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器 #2、yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可返回多次 # 因为yield可以保存函数执行的状态 # def my_range(): # print('start........') # n=0 # while True: # yield n # n+=1 # obj=my_range() # print(obj) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # for i in my_range(): # print(i) def my_range(start,stop,step=1): n=start while n < stop: yield n #yield 4 n+=step #5 # obj=my_range(3,7,2) #3,5, # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) for item in my_range(5,10,2): print(item)
四、面向过程编程
1、什么是面向过程编程: 核心是”过程“二字,过程指的是解决问题的步骤 即先干什么,再干什么 基于该思想编写程序就好比在设计一条流水线,是一种 机械式的思维方式 2、优点: 复杂的问题流程化、进而简单化 3、缺点: 扩展性差
xxxx
#1、步骤一:拿到用户输入的合法的信息:用户名、密码、余额、年龄 db_path='db.txt' def get_uname(): while True: uname=input('用户名>>:').strip() if not uname.isalpha(): print('\033[45m用户名必须为英文字母...\033[0m') continue with open(r'%s' %db_path,'r',encoding='utf-8') as f: for line in f: uinfo=line.strip('\n').split(',') if uname == uinfo[0]: print('\033[45m用户名已存在...\033[0m') break else: return uname def get_pwd(): while True: pwd1=input('请输入密码>>: ').strip() pwd2=input('再次输入密码>>: ').strip() if pwd1 == pwd2: return pwd1 else: print('\033[45m两次输入的密码不一致,请重新输入...\033[0m') def get_bal(): while True: bal=input('请输入余额: ').strip() if bal.isdigit(): # bal=int(bal) return bal else: print('\033[45m钱必须是数字,傻叉...\033[0m') def get_age(): pass #2、步骤二:写入文件 def file_hanle(uname,pwd,bal,age): with open(r'%s' %db_path,'a',encoding='utf-8') as f: f.write('%s,%s,%s,%s\n' %(uname,pwd,bal,age)) # 注册功能 def register(): #步骤1: uname=get_uname() #拿到合法的用户名 pwd=get_pwd() #拿到合法的密码 bal=get_bal() #拿到合法的余额 #步骤2: file_hanle(uname,pwd,bal) #写入文件
原文链接:https://www.cnblogs.com/qinxin1/p/10301546.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:pygame试水,写一个贪吃蛇
下一篇:python3 多线程的使用
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash