一、装饰器

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 # # 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) #写入文件

  

python_装饰器——迭代器——生成器的更多相关文章

  1. Day4 装饰器——迭代器——生成器

    一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多 ...

  2. python中的装饰器迭代器生成器

    装饰器: 定义:本质是函数(装饰其它函数) 为其它函数添加附加功能 原则: 1 不能修改被装饰函数源代码    2 不修改被装饰函数调用方式 实现装饰器知识储备: 1 函数即‘’变量‘’ 2 高阶函数 ...

  3. Python学习---装饰器/迭代器/生成器的学习【all】

    Python学习---装饰器的学习1210 Python学习---生成器的学习1210 Python学习---迭代器学习1210

  4. day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数

    回顾下上次的内容 转码过程: 先decode  为 Unicode(万国码 ) 然后encode 成需要的格式     3.0 默认是Unicode  不是UTF-8 所以不需要指定  如果非要转为U ...

  5. day4装饰器-迭代器&&生成器

    一.装饰器 定义:本质是函数,(装饰其他函数)就是为其它函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数及“变量” 2.高阶 ...

  6. python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...

  7. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  8. Python中的装饰器,迭代器,生成器

    1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的 ...

  9. python迭代器、装饰器和生成器

    装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实 ...

随机推荐

  1. SpringBoot自定义参数解析器

    一.背景 平常经常用 @RequestParam注解来获取参数,然后想到我能不能写个自己注解获取请求的ip地址呢?就像这样 @IP String ip 二.分析 于是开始分析 @RequestPara ...

  2. Linux下备份MySQL数据库的Shell脚本

    数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...

  3. 使用selesium和pytesseract识别验证码,达到登录网页目的

    关于验证码问题,大多可以在网上了解到目前有四种解决方案:1.开发注释验证码2.开发开一个“后门”,设置一个万能码,输入万能码则通过3.通过cookies绕过验证码4.图形识别技术 前三种是比较快速也是 ...

  4. Django Views: Dynamic Content

    世味年来薄似纱,谁令骑马客京华. 小楼一夜听春雨,深巷明朝卖杏花. 矮纸斜行闲作草,晴窗细乳戏分茶. 素衣莫起风尘叹,犹及清明可到家. Your Second View: Dynamic Conten ...

  5. 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

    这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)

  6. PostgreSQL - 转义字符

    转载至:postgresql字符转义 前言 在PostgreSQL 9之前的版本中,可以直接使用反斜杠\进行转义:比如:\b表示退格, \n表示换行, \t表示水平制表符,\r标示回车,\f表示换页. ...

  7. spring MVC 文件上传错误

    1.The request sent by the client was syntactically incorrect () http://luanxiyuan.iteye.com/blog/187 ...

  8. C语言-------指针函数与函数指针的区别

    一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...

  9. ACM_X章求和(数学)

    X章求和 Time Limit: 2000/1000ms (Java/Others) Problem Description: X章最喜欢求和了,他一看到什么鬼就什么鬼都加起来.one day,他得到 ...

  10. MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)

    一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它 ...