python 函数可以作为容器对象的元素_14、函数对象和闭包
目录:一 函数对象1.1 函数可以被引用
1.2 函数可以作为容器类型的元素
1.3 函数可以作为参数传入另外一个函数
1.4 函数的返回值可以是一个函数
二 闭包函数2.1 闭与包
2.2 闭包的用途
视频链接
一 函数对象
函数对象指的是函数可以被当做’数据’来处理,具体可以分为四个方面的使用,我们如下
1.1 函数可以被引用
>>> def add(x,y):
... return x+y
...
>>> func=add
>>> func(1,2)
3
1.2 函数可以作为容器类型的元素
>>> dic={'add':add,'max':max}
>>> dic
{'add': , 'max': }
>>> dic['add'](1,2)
3
1.3 函数可以作为参数传入另外一个函数
>>> def foo(x,y,func):
... return func(x,y)
...
>>> foo(1,2,add)
3
1.4 函数的返回值可以是一个函数
def bar():
return add
func=bar()
func(1,2)
3
二 闭包函数
2.1 闭与包
基于函数对象的概念,可以将函数返回到任意位置去调用,但作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。
x=1
def f1():
def f2():
print(x)
return f2
def f3():
x=3
f2=f1() #调用f1()返回函数f2
f2() #需要按照函数定义时的作用关系去执行,与调用位置无关
f3() #结果为1
也就是说函数被当做数据处理时,始终以自带的作用域为准。若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)
x=1
def outer():
x=2
def inner():
print(x)
return inner
func=outer()
func() # 结果为2
可以通过函数的closure属性,查看到闭包函数所包裹的外部变量
>>> func.__closure__
(,)
>>> func.__closure__[0].cell_contents
2
“闭”代表函数是内部的,“包”代表函数外’包裹’着对外层作用域的引用。因而无论在何处调用闭包函数,使用的仍然是包裹在其外层的变量。
2.2 闭包的用途
目前为止,我们得到了两种为函数体传值的方式,一种是直接将值以参数的形式传入,另外一种就是将值包给函数
import requests
#方式一:
def get(url):
return requests.get(url).text
#方式二:
def page(url):
def get():
return requests.get(url).text
return get
提示:requests模块是用来模拟浏览器向网站发送请求并将页面内容下载到本地,需要事先安装:pip3 install requests
对比两种方式,方式一在下载同一页面时需要重复传入url,而方式二只需要传一次值,就会得到一个包含指定url的闭包函数,以后调用该闭包函数无需再传url
# 方式一下载同一页面
get('https://www.python.org')
get('https://www.python.org')
get('https://www.python.org')
……
# 方式二下载同一页面
python=page('https://www.python.org')
python()
python()
python()
……
闭包函数的这种特性有时又称为惰性计算。使用将值包给函数的方式,在接下来的装饰器中也将大有用处
视频链接:
函数对象:https://www.bilibili.com/video/av73342471?p=43www.bilibili.com
闭包函数:https://www.bilibili.com/video/av73342471?p=46www.bilibili.com
python 函数可以作为容器对象的元素_14、函数对象和闭包相关推荐
- [Python系列-11]:人工智能 - 数学基础 -1- 数组元素的函数运算
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...
- python慕课笔记_MOOC python笔记(三) 序列容器:字符串、列表、元组
Python Python开发 Python语言 MOOC python笔记(三) 序列容器:字符串.列表.元组 容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器 ...
- 数据分析学习笔记—python数据类型与数据容器
文章目录 1.python标准数据类型 2.python数据容器概念 3.python数据容器思维导图 1.python标准数据类型 2.python数据容器概念 容器类数据模型,从个人角度理解来说, ...
- 数据 数据元素 数据项 数据对象
文章目录 数据.数据元素.数据项和数据对象 数据 数据元素 数据对象 数据元素和数据对象 数据结构 数据结构包括以下三个方面的内容 逻辑结构 物理结构(存储结构) 逻辑结构与存储结构的关系 逻辑结构的 ...
- 【Linux 内核 内存管理】RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )
文章目录 一.RCU 模式下添加链表项 list_add_rcu 函数 二.RCU 模式下删除链表项 list_del_rcu 函数 一.RCU 模式下添加链表项 list_add_rcu 函数 在 ...
- python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...
复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...
- python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- python函数可以作为容器对象吗_正确理解Python函数是第一类对象
正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...
- python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
Python内置函数()可以返回列表.元组.字典.集合.字符串以及range对象中元素个数. 青岛远洋运输有限公司冷聚吉船长被评为全国十佳海员.()A:错B:对 有源逆变是将直流电逆变成其它频率的交流 ...
最新文章
- JavaScript 验证表单不为空和获取select下拉列表的值和文本
- Spring Boot 集成 Redis 实现缓存机制
- linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
- 本地安装的smushit,如何压缩图片
- 网络攻防技术——shellcode编写
- matlab中probIdx = 2 2,利用1stOpt1.5 pro来进行多元非线性拟合
- 路由器重温——可靠性-接口备份和双机热备份配置管理
- Intellij IDEA 使用教程(十三)IDEA内存优化
- ept技术_每天5分钟跟我一起学电气之EPT的原理
- 范蠡传(司马迁-史记)
- x264 i_thead
- 少年宫计算机室管理制度,少年宫计算机室活动计划](4页)-原创力文档
- GitHub的使用(入门)
- 各种滤波器的设计实现
- SAP可配置(VC)的特性相关性简介
- 线程池invokeAll方法详解
- 排序---小白鼠排队
- 专题页面无原创确能做排名的原因及做法
- JVM-虚拟机栈之动态链接
- 访问网络文件共享服务