闭包(closure): 内嵌函数通过调用外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包.

闭包必须满足三个条件:

  • 必须有一个内嵌函数
  • 内嵌函数必须引用外部嵌套函数中的变量
  • 外部函数的返回值必须是内嵌函数
eg:
def make_power(y):
def fn(x):
return x ** y
return fn pow = make_power(2)
print pow(5) #25
#声明pow时返回了函数fn并将2作为嵌套函数的参数传入
#闭包内嵌套函数传递参数时,参数保留

装饰器(decorators):是一个函数,主要作用为包装一个函数或类.包装的目的是在不改变函数名的情况下改变被包装对象的行为

eg:
def priv_check(fn):
def fx(name,x):
print ('权限校验')
fn(name,x)
return fx @priv_check
def save_money(name,x):
print('存钱') @priv_check
def withdraw(name,x):
print('取钱') save_money('tiny',100)
withdrwa('tim',50)

迭代器: 访问可迭代对象的一种方式,用迭代器可返回可迭代对象.

迭代器函数iter和next:

iter(iterable):从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的对象
next(iterator):从迭代器iterator中获取下一个记录,如果无法获取,则触发StopIteration异常

说明:

迭代器只能往前取值,不会后退

用iter函数可以返回一个可迭代对象的迭代器

eg:
L = [2,3]
it = iter(L) #用iter返回一个迭代器用it绑定
next(it) #2 #用next函数来获取L中的元素
next(it) #3
next(it) #StopIteration #通知next调用者,已无数据

生成器:能够动态提供数据的对象,生成器对象也是可迭代对象。

生成器有两种,分别是生成器函数和生成器表达式

生成器函数:含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象

yield语句:

语法:

yield 表达式

说明:

yield用于def函数中,目的是将此函数作为生成器函数使用

yield用来生成数据,供next()函数使用

eg:
def gen_yield():
yield 2
yield 4
print('test') gen = gen_yield()
it = iter(gen) #返回一个迭代器
next(it) #2
next(it) #4
next(it) #test #StopIteration

python基础(三)闭包与装饰器的更多相关文章

  1. python基础16_闭包_装饰器

    不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield  generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...

  2. Python基础(七) 闭包与装饰器

    闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...

  3. Python基础编程闭包与装饰器

    闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...

  4. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  5. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

  6. 21.python中的闭包和装饰器

    python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). 以下说明主要针对 python ...

  7. Python基础(八)装饰器

    今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...

  8. python中的闭包和装饰器

    重新学习完了函数,是时候将其中的一些重点重新捋一捋了,本次总结的东西只有闭包和装饰器 1.闭包 闭包是python函数中的一个比较重要功能,一般闭包都是用在装饰器上,一般学完闭包就会去学习装饰器,这俩 ...

  9. Python 中的闭包与装饰器

    闭包(closure)是函数式编程的重要的语法结构.闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性. 如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数 ...

  10. python基础:10.多线程装饰器模式下的单例模式

    with def __enter__ def __close__ 闭包: 装饰器: 闭包的延迟绑定: 单例模式的应用:

随机推荐

  1. 列表推导式、生成器表达式以及zip()max()max()/min()sum()sort()map()filter()的用法

    列表推导式: 基本格式: variable = [out_exp_res for out_exp in input_list if out_exp == 2] #out_exp_res: 列表生成元素 ...

  2. jquery对象和dom原生获取的对象是不同的。

    写了一个点击无缝滚动的demo,但是点击的时候如果上一个不运动完成,在快速点击就会快闪. 可是开始也清除定时器了,后来发现是传入的jq对象,jqobj.timer=定时器,这里jqobj没法添加.ti ...

  3. 「NOI2015」软件包管理器

    题目描述 题面比较啰唆,我先把大体意思讲一下: 首先,有编号从\(0\)到\(N-1\)的\(N\)个节点,根节点一定是\(0\)号节点(无前驱) (我把下标都加上了一,转化为以\(1\)为起始下标的 ...

  4. springboot 时间戳和 数据库时间相差14个小时

    在 springboot 开发过程中遇到一个奇怪的问题,就是已经设置系统时间GMT+8, 但是时间到数据库后会减少14个小时.后来发现是 jvm 时区和数据库时区设置不一致的问题. jvm 设置的是 ...

  5. UITextField的使用、介绍、讲解、全解、简介、说明

    [2018年中秋节良心写作]文章将尽可能的全面介绍UITextField的所有相关知识,逻辑连贯,需要认真理解,一气呵成. 关键词: 屏幕键盘(onscreen keyboard).键盘自定义.键盘类 ...

  6. C# 增加时间的三个方法

    第一个是使用方法形式的实例方法: incrementer.CountedADozen += IncrementDozensCount;  //方法引用形式 第二个是使用方法形式的静态方法: incre ...

  7. ADV-297 快速排序 java

    问题描述 用递归来实现快速排序(quick sort)算法.快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x.首先对数组中的元素进行调整,使x放在正确的位置上.同时,所有比x小 ...

  8. 新见Java数据类型_需了解

    LinkedList<T>.LinkedList.poll() 先给出结论:pop 与 poll 都是取出 LinkedList 的第一个元素,并将该元素删除,等效于:removeFirs ...

  9. JS 函数创建、封装、调用

    一.简单函数创建.封装 第三种就是构造函数 function fun(a,b){ this.firstName=a this.lastName=b } var x=new myFun(Jhon,Dav ...

  10. windows系统下 VUE cli手脚架环境安装

    1.安装 node.js环境  (cmd命令工具里输入 node -v 检测是否安装成功) 2.安装VUE 全局环境 npm install --global vue-cli (cmd命令工具里面安装 ...