python开发中装饰器-迭代器-生成器定义及用法详细解析

在这里插入图片描述
  在Python开发刚入门的时候肯定对于他的装饰器、迭代器与生成器掌握的并不是很好,有的小伙伴们很多的时候回记混,下面就这三种做一个详细解析。
一、装饰器
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.itjmd.com/news/show-5373.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值