迭代器、生成器、闭包

***********************************************2018.01.10***********************************************************

————————————————迭代器———————————————————————

什么是迭代器?

可用next()函数调用的就是迭代器

生成器一定是迭代器

from collections import Iterable

isinstance(对象,Iterable)判断一个对象是否具有可迭代性

iter(对象)可将可迭代对象转换成迭代器

————————————————闭包———————————————————————

闭包函数必须满足两个条件:1.函数内部定义的函数 2.包含对外部作用域而非全局作用域的引用

外部函数返回内部函数的引用

用例:创建多个方程式

def test(a,b):
  def test_in(x):

    print(a*x+b)

  return test_in

line1=test(1,1)#括号中的参数赋给a,b

line2=test(1,2)

line3=test(4,5)

#调用line1,取一个坐标点

line(10)#括号中的参数赋给x

————————————————装饰器——————————————————————

在不改变原函数的基础上,让原函数实现另外的功能,就是装饰器

装饰器:外部函数传入被装饰函数名,内部函数返回装饰函数名。

特点:1.不修改被装饰函数的调用方式 2.不修改被装饰函数的源代码

多重装饰器的顺序是由近到远

想对多参数函数进行装饰,装饰器闭包内函数需要相同数量的参数。使用*args,**args

def w1(func):
  def inner():
    func()

  return inner

@w1#语法糖

def  f1():

  print('****F1*****)

def  f2():
  print('*****f2******)

 

posted on 2018-01-11 08:17  Jerry_Zhao  阅读(116)  评论(0编辑  收藏  举报

导航