wraps模块

让原函数保留原来的说明信息

import time
import random
from functools import wraps
def auth(func):
'''auth information'''
@wraps(func)
def auth_user():
func()
return auth_user
@auth
def web():
'''web information'''
time.sleep(random.randrange(1,5))
print('welcome to my web index')
web()
# 查看注释信息
print(auth.__doc__)
print(help(web))

有参装饰器

def deco(auth_type='file'):
def auth(func):
def wrapper(*args,**kwargs):
if auth_type == 'file':
print('文件的认证方式')
elif auth_type == 'ldap':
print('ldap认证方式')
elif auth_type == 'mysql':
print('mysql认证方式')
else:
print('不知道的认证方式')
return wrapper
return auth
@deco(auth_type='abc') #@auth #index=auth(index)
def index():
print('welecome to index')
@deco(auth_type='ldap')
def home(name):
print('welecome %s to home page' %name)
index()
home('egon')

迭代器

迭代:

  重复执行

  下一次的重复执行依赖于上一次执行的结果

以下代码只满足重复执行,每下一次执行都是从头开始执行的,所以不属于迭代。

while True:
cmd=input('>>: ')
print(cmd)

以下代码满足重复执行,而且每下一次执行都是从上一次执行后的结果开始执行的,属于迭代

1
2
3
4
5
l=['a','b','c','d']
count=0
while count < len(l):
    print(l[count])
    count+=1

迭代器

python为了提供一种不依赖于索引的迭代方式,会为一些对象内置__iter__方法,obj.__iter__称为可迭代的对象。

s1='hello'
l=[1,2,3]
t=(1,2,3)
set1={1,2,3}
d={'a':1,'b':2,'c':3}
f=open('db.txt',encoding='utf-8')

字符串、元组、列表、集合、字典、文件等都是可迭代对象,迭代的过程中都能够用到迭代器。

迭代器就是obj.__iter__()得到的一个结果,每次使用obj.__next__()都能够获得一个迭代后的结果,当所有的元素都迭代后,会抛出“StopIteration”的错误提示表示没有内容可以继续迭代了。

d={'a':1,'b':2,'c':3}
i=d.__iter__() #i叫迭代器
print(i)
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__()) #StopIteration

迭代器的优缺点:

迭代器的优点
  1:提供了一种不依赖于索引的取值方式
  2:惰性计算。节省内存
迭代器的缺点:
  1:取值不如按照索引取值方便
  2:一次性的。只能往后走不能往前退
  3:无法获取长度

迭代器的应用

在for循环迭代的过程中,每一次的循环都有迭代器的参与。

l=['x','y','z']
for item in l: #i=l.__iter__()
print(item)

数字是无法迭代的对象

python基础之装饰器扩展和迭代器的更多相关文章

  1. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  2. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  3. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  4. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  5. 1.16 Python基础知识 - 装饰器初识

    Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用.在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等.一个函数可以使用多个装饰器,产生的结果与装饰器的位 ...

  6. 学习PYTHON之路, DAY 5 - PYTHON 基础 5 (装饰器,字符格式化,递归,迭代器,生成器)

    ---恢复内容开始--- 一 装饰器 1 单层装饰器 def outer(func): def inner(): print('long') func() print('after') return ...

  7. Python开发基础-Day8-装饰器扩展和迭代器

    wraps模块 让原函数保留原来的说明信息 import time import random from functools import wraps def auth(func): '''auth ...

  8. python基础之装饰器(实例)

    1.必备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...

  9. Python开发【第一篇】Python基础之装饰器

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块开放:对扩展开发 #s2 ...

随机推荐

  1. Android触摸事件MotionEvent详解

    触摸事件MotionEvent在用户交互中,占着非常重要的地位.首先,来看看MotionEvent中封装的一些常用的事件常量,它定义了触摸事件的不同类型. 1.单点触摸按下动作 public stat ...

  2. 【QT】【OpenCv】初始配置以及测试功能

    #include "mainwindow.h" #include "ui_mainwindow.h" #include<opencv2/core/core ...

  3. mysql-5.7安装配置指导

    mysql 安装 yum 安装mysql 源码编译安装mysql 通过yum安装 下载yum仓库配置安装包 MySQL Yum Repository http://dev.mysql.com/down ...

  4. 使用uwsgi启动django项目

    在 manage.py 同级目录 创建 uwsgi.ini 文件 ,内容如下: [uwsgi] # 对外提供 http 服务的端口 http = :18123 #the local unix sock ...

  5. Azure SQL的DTU和eDTU到底是个什么鬼

    可以从上表上对应于本地数据库的性能采集的指标,可以估算出应该使用什么样级别的AZURE SQL. 当然服务层选择后仍然可以进行更改. 对于自己应用应该用多大规模的DTU,可以进行详细的评估,可以使用下 ...

  6. Azure CDN:氮气加速已开启,司机们请做好准备

    在上一周,我们向各位小伙伴介绍了通过 Azure CDN 高级版服务为 HTTPS 应用加速的做法,漏掉的小伙伴可以点击这里穿越回去补课哦.那我们今天讲点什么呢?当然是 CDN 最重要的价值:改善应用 ...

  7. Linux目录配置——Linux目录配置标准:FHS

    事实上,FHS针对目录树架构仅定义出三层目录下应该放置哪些数据,分别是下面三个目录: 一./(根目录):与开机系统有关 根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一 ...

  8. 笨办法学Python(零)

    py走起!!! 习题0:准备工作 Windows平台 1. 用浏览器打开 http://learnpythonthehardway.org/exercise0.html 下载并安装 gedit 文本编 ...

  9. 94. Binary Tree Inorder Traversal(inorder ) ***(to be continue)easy

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  10. 【转载】#330 - Derived Classes Do Not Inherit Constructors

    A derived class inherits all of the members of a base class except for its constructors. You must de ...