python基础(三)闭包与装饰器
闭包(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基础(三)闭包与装饰器的更多相关文章
- python基础16_闭包_装饰器
不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...
- Python基础(七) 闭包与装饰器
闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...
- Python基础编程闭包与装饰器
闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...
- 十一. Python基础(11)—补充: 作用域 & 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
- 21.python中的闭包和装饰器
python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). 以下说明主要针对 python ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- python中的闭包和装饰器
重新学习完了函数,是时候将其中的一些重点重新捋一捋了,本次总结的东西只有闭包和装饰器 1.闭包 闭包是python函数中的一个比较重要功能,一般闭包都是用在装饰器上,一般学完闭包就会去学习装饰器,这俩 ...
- Python 中的闭包与装饰器
闭包(closure)是函数式编程的重要的语法结构.闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性. 如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数 ...
- python基础:10.多线程装饰器模式下的单例模式
with def __enter__ def __close__ 闭包: 装饰器: 闭包的延迟绑定: 单例模式的应用:
随机推荐
- Ubuntu12.04LTS中安装和使用Spin
https://blog.csdn.net/jackandsnow/article/details/94434481 把第三步 安装tk(在wish中):apt-get install wish 改为 ...
- Codeforces 601A:The Two Routes 宽搜最短路径
A. The Two Routes time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- gcd && exgcd算法
目录 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 2.扩展欧几里德算法 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 #include<bits/stdc++.h> using ...
- Linux命令:ip命令
ip命令功能:配置网络属性 一.ip link 系列 ip link ip [-s] link show # 查看默认信息 ip link show eth0 ip link show ...
- C++中的四种类型转换运算符static_cast、dynamic_cast、const_cast和reinterpret_cast的使用
1.上一遍讲述了C语言的隐式类型转换和显示类型转换,C语言之所以增加强制类型转换,就是为了强调转换的风险性,但这种强调风险的方式是比较粗放了,粒度比较大,它并没有表明存在什么风险,风险程度如何. 2. ...
- [经验] Java 服务端 和 C# 客户端 实现 Socket 通信
由于项目需要, 我需要通过 Java 开发的服务端对 C# 作为脚本语言开发的 unity 项目实现控制 话不多说, 直接上代码 首先, 我们先来构建服务端的代码, 服务端我们使用 Java 语言 i ...
- Indexed (materialized) views in SQL Server,different with Oracle (materialized) views
Thanks to MS sql could have materialized views ,similar with oracle MVs, using indexed views. what i ...
- XML规范化(DTD)
无意义的XML 之前说过因为xml没有预设的标签,所以说你怎麽写他一般都不会报错. 所以需要对xml的书写格式进行一些限制,这就引入了DTD 下面的这个xml你可以给book添加各种属性还不会报错,但 ...
- 「CH6202」黑暗城堡
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...
- 爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware
1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...