# 装饰器
'''
由高阶函数(把一个函数名当作实参传递给另一个函数,返回值中包含函数名)

嵌套函数(函数中嵌套函数)组成
功能:在不更改原函数的代码和调用方式的前提下添加新的功能 装饰器本身就是一个函数。使用方法如 装饰器函数 1、自动执行装饰器函数login并且被装饰的函数名(index)当做参数传递给函数(fun = index)
2、将装饰函数login的返回值auto重新赋值给被装饰的函数
'''
example
# 如果被装饰的函数带参数
def login(fun):
def auto():
print("add new Function")
fun()
return auto @login
def index():
print("in the index") index()

# *args, **kwargs 万能参数, *args 传位置参数并将参数转换成为一个元组格式, **kwargs 传关键字参数,并转换成字典格式
def login(fun):
def auto(*args, **kwargs):
print("add new Function")
fun(*args, **kwargs)
return auto @login
def admin(name):
print("the admin user name is {_name}".format(_name=name)) admin("babi")
# 场景应用,三个页面(index,admin,information)进入首页不用登录,进入后台和用户信息页面需要登录
name, pwd = "jian", "0325"

def login(fun):
def demo(*args, **kwargs):
usname = input("Username:").strip()
passwd = input("Password:").strip()
if usname == name and passwd == pwd:
print("welcome to shopping car!")
return fun(*args, **kwargs)
else:
print("Input error")
return demo def index():
print("in the index...........") @login
def admin():
print("in the admin===================")
return "admin" @login
def information(fuck):
print("in the information-----------------{fa}".format(fa=fuck)) index() admin() information('fuck fuck fuck')
# 生成器 generator   
可以在函数执行的过程中执行其他操作
'''
生成器本身也是一个函数,加上yield就变成了一个生成器,执行只能通过next一步步执行
一般函数执行的时候都是一次性把整个函数执行完才能去执行其他的命令,而生成器是可以自由的进出函数内部,在执行过程中增加其他操作
'''
# example:
# 普通函数
def fun():
for i in range(4):
print(i) fun() # 0 1 2 3
# 生成器函数,需要调用next才能一步步执行 def test1():
for j in range(3):
print(j)
yield yi = test1() # test1() = <generator object test1 at 0x00000272AD062DB0> 生成器对象
yi.__next__()
print("做点其他事情")
yi.__next__()
# 生成器捕获异常方法
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b # 相当于 c = (b, a+b) a = c[0] b=c[1]
n += 1
return 'done' # 直接使用__next__函数,如果调用的次数超过应有的次数,就会抛一个异常StopIteration,return指定报异常的值 fi = fib(5)
# try except 捕获error 并自定义 error 输出的警告代码, except 后指定报错的类型(StopIteration)
while True:
try:
x = next(fi)
print(x)
except StopIteration as e:
print('Error code return value', e.value)
break

# 迭代器

from collections import Iterable  # 引用迭代对象
from collections import Iterator # 引用迭代器对象
# Iterable 迭代对象(可循环的对象)
'''
string、列表、集合、元组、字典等
''' # Iterator 迭代器对象 可以被next()函数调用并返回下一个值的对象 (迭代对象有next方法就成为迭代器对象:
例如:a=[1,2,3],dir(a)不包含next方法,就不是迭代器对象),可以用isinstance判断是否是
print(isinstance([], list)) # True
print(isinstance([], Iterator)) # False # 迭代对象可以通过iter()函数转换为 迭代器对象
print(isinstance(iter([]), Iterator)) # True
 

python 装饰器、生成器、迭代器的更多相关文章

  1. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  2. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

  3. python装饰器、迭代器、生成器

    装饰器:为已存在的函数或者或者对象添加额外的功能 def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事' ...

  4. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...

  5. python三大器(装饰器/生成器/迭代器)

    1装饰器 1.1基本结构 def 外层函数(参数): def 内层函数(*args,**kwargs); return 参数(*args,**kwargs) return 内层函数 @外层函数 def ...

  6. python — 装饰器、迭代器

    目录 1 装饰器 2 迭代器 3 可迭代对象 1 装饰器 1.1目的.应用场景: 目的: 在不改变原函数内部代码的基础上,在函数执行前后自定义功能. 应用场景: 想要为函数扩展功能时,可以选择用装饰器 ...

  7. python第六章:三大利器(装饰器,迭代器,生成器)--小白博客

    python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...

  8. Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)

    Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数

  9. Python之装饰器、迭代器和生成器

    在学习python的时候,三大“名器”对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?“装饰”从字面意思 ...

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

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

随机推荐

  1. galera mysql 多主复制启动顺序及命令

    Mysql 被复制机 sql启动

  2. Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程 - VPS侦探

    Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ...

  3. 最受IT公司欢迎的50款开源软件

    文章来自:云头条编译 本文介绍了多款知名的开源应用软件,科技公司可以用它们来管理自己的 IT 基础设施.开发产品. 过去十年间,许多科技公司已开始畅怀拥抱开源.许多公司使用开源工具来运行自己的 IT ...

  4. MySQL可视化管理工具 —— Navicat for MysSQL

    类似PL/SQL管理Oracle的工具 Navicat可以管理MySQL 1.安装 2.连接(输入IP.端口.用户名.密码) 3.新建sql语句:点击左侧database.点击菜单“查询”.点击“新建 ...

  5. 用python 装饰器打log

    # coding=utf-8    from time import time def logged(when):     def log(f,*args,**kargs):         prin ...

  6. 实现html转Xml

    最近在做一些网页信息采集的工作,说通俗点就是爬虫工具,要监控页面中某一部分内容是否发生变化.起初考虑用正则表达式去匹配网页源码,经过咨询有经验人士,推荐使用xpath去获取页面内容能获得更好的效率.但 ...

  7. SQL Server 2012 sa 用户登录 18456 错误

    近期想研究下SQL SERVER2012 Enterprise版本号的数据库,听说功能非常强大. 我是在win7上安装的,安装的过程非常顺利,我在用"Windows 身份验证"时, ...

  8. php 总结

    1.安装完apache之后 2.有一个目录 htdocs 下面就是根目录了 3.测试一下,新建一个index.html 写入 it works  .输入localhost 看是否显示 it works ...

  9. mysqldump备份数据库时出现when using LOCK TABLES

    用mysqldump备份数据库时,如果出现when using LOCK TABLES,解决办法是加上 --skip-lock-tables 例如: 用mysqldump备份数据库时出现 29: Fi ...

  10. JMeter 使用

    Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: (1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为. (2)用户运行器:通常是一个脚本运行引擎,用户运行器附加 ...