目录:一 函数对象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=43​www.bilibili.com

闭包函数:https://www.bilibili.com/video/av73342471?p=46​www.bilibili.com

python 函数可以作为容器对象的元素_14、函数对象和闭包相关推荐

  1. [Python系列-11]:人工智能 - 数学基础 -1- 数组元素的函数运算

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...

  2. python慕课笔记_MOOC python笔记(三) 序列容器:字符串、列表、元组

    Python Python开发 Python语言 MOOC python笔记(三) 序列容器:字符串.列表.元组 容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器 ...

  3. 数据分析学习笔记—python数据类型与数据容器

    文章目录 1.python标准数据类型 2.python数据容器概念 3.python数据容器思维导图 1.python标准数据类型 2.python数据容器概念 容器类数据模型,从个人角度理解来说, ...

  4. 数据 数据元素 数据项 数据对象

    文章目录 数据.数据元素.数据项和数据对象 数据 数据元素 数据对象 数据元素和数据对象 数据结构 数据结构包括以下三个方面的内容 逻辑结构 物理结构(存储结构) 逻辑结构与存储结构的关系 逻辑结构的 ...

  5. 【Linux 内核 内存管理】RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )

    文章目录 一.RCU 模式下添加链表项 list_add_rcu 函数 二.RCU 模式下删除链表项 list_del_rcu 函数 一.RCU 模式下添加链表项 list_add_rcu 函数 在 ...

  6. python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

  7. python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...

    python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  8. python函数可以作为容器对象吗_正确理解Python函数是第一类对象

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  9. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....

    Python内置函数()可以返回列表.元组.字典.集合.字符串以及range对象中元素个数. 青岛远洋运输有限公司冷聚吉船长被评为全国十佳海员.()A:错B:对 有源逆变是将直流电逆变成其它频率的交流 ...

最新文章

  1. JavaScript 验证表单不为空和获取select下拉列表的值和文本
  2. Spring Boot 集成 Redis 实现缓存机制
  3. linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
  4. 本地安装的smushit,如何压缩图片
  5. 网络攻防技术——shellcode编写
  6. matlab中probIdx = 2 2,利用1stOpt1.5 pro来进行多元非线性拟合
  7. 路由器重温——可靠性-接口备份和双机热备份配置管理
  8. Intellij IDEA 使用教程(十三)IDEA内存优化
  9. ept技术_每天5分钟跟我一起学电气之EPT的原理
  10. 范蠡传(司马迁-史记)
  11. x264 i_thead
  12. 少年宫计算机室管理制度,少年宫计算机室活动计划](4页)-原创力文档
  13. GitHub的使用(入门)
  14. 各种滤波器的设计实现
  15. SAP可配置(VC)的特性相关性简介
  16. 线程池invokeAll方法详解
  17. 排序---小白鼠排队
  18. 专题页面无原创确能做排名的原因及做法
  19. JVM-虚拟机栈之动态链接
  20. 访问网络文件共享服务

热门文章

  1. visual2019没有勾选的在如何加入_没有预留期权池,如何激励新加入者?
  2. UI设计灵感|如何将数据摆放得整整齐齐?
  3. 液态渐变背景纹理,选择一个新潮的背景,为你的设计加分!
  4. 矢量素材 |企业商务画册设计参考
  5. 老司机如何找素材,如何找灵感?
  6. 手机应用UI设计示例+模板|为了在下一个应用程序设计项目找到灵感
  7. 助力双十一,促销海报设计模板收好!
  8. qwt需要添加到qcreator的东西
  9. Qemu 简述 | 转
  10. echart 三维可视化地图_Echarts百度可视化图形库