python闭包

闭包的条件

1.闭包函数必须返回一个函数对象

2.闭包函数内部的函数必须引用外部的函数的变量,(一般不能引用全局的变量),里面函数的返回值可有可无

闭包格式

def 外层函数(参数):

def 内层函数():

print("内层函数执行", 参数)

return 内层函数

内层函数的引用 = 外层函数("传入参数")

内层函数的引用()

__closure__查看闭包引用的外部函数作用域的值

首先是一个元组

def zx():

a=1

b=2

def inner(z):

print(a+b+z)

return inner

wl = zx()

print(wl.__closure__.__class__)

print(wl.__closure__)

for i in wl.__closure__:

print(i.cell_contents)

(, )

1

2

Process finished with exit code 0

注意

1.内部函数如果不引用外部函数的值,那么__closure__一直为None

2.如果主函数没有返回子函数,那么没有__closure__属性

闭包的意义

1.返回的函数对象,不仅仅是一个函数对象,这个对象外部还包裹着一层作用域,可以在这层作用域中放入想要的参数,这样就可以使函数对象无论什么时候优先使用这层作用域中的值,有屏蔽全局作用域的作用

2.外部无法访问嵌套函数内部的变量,只能靠函数返回的对象,在能访问这些变量

闭包案例

从例子中可以看出,函数无法保存for产生的临时变量,最后都指向最后一个,如果有需求要保存临时变量怎么解决呢?这个时候就需要用到闭包了

lis = []

for i in range(3):

def zx(a):

return a+i

lis.append(zx)

for f in lis:

print(f(2))

4

4

4

使用闭包,就可以保存for产生的临时变量,保存到函数的局部作用域中

lis = []

for i in range(3):

def zx(i):

def inner(a):

return a+i

return inner

lis.append(zx(i))

for f in lis:

print(f(2))

2

3

4

闭包的应用

1.装饰器

def login_auth(func):

def inner(*args,**kwargs):

#业务逻辑

res = func(*args,**kwargs)

return res

return inner

2.爬虫

import requests

def outter(url):

def get():

response = requests.get(url)

print(f"done: {url}")

return get

baidu=outter('https://www.baidu.com')

python = outter('https://www.python.org')

baidu()

3.闭包可以保存运行环境

def zx(a):

def inner():

print(a)

return inner

wl = zx(10)

a=100

wl()

10

闭包的实际案例

def who(name):

def do(what):

print(name,'说:',what)

return do

zx = who('zx')

wl = who('wl')

zx('吃饭去啊')

wl('好啊')

zx 说: 吃饭去啊

wl 说: 好啊

参考链接

python闭包的条件_python闭包相关推荐

  1. python闭包怎么理解_Python 闭包的理解

    Last Updated on 2019年10月15日 Python中的闭包是一个比较模糊的概念,不太好理解,我最近的面试中也被问及,在一个单例模式的实现上,我用装饰器实现单例,然后面试官就问到了我对 ...

  2. python闭包实现原理_Python 闭包详解

    在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...

  3. python什么是闭包的作用域_Python闭包的作用域理解

    什么是闭包 在维基中,闭包的解释是这样的: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在, ...

  4. python闭包修改全局变量_Python 闭包 自由变量

    理解:封闭的东西:保证数据的安全 #平均收盘价 方案一数据是不安全的 l1 = [] def make_average(new_value): l1.append(new_value) total = ...

  5. python重新执行条件_Python 基础(二)

    封面图片来源:沙沙野 内容概览Python 中的 type() 函数 Python 中的条件判断语句一: if Python 中的条件判断语句二:while Python 中的 type() 函数ty ...

  6. python闭包修改全局变量_python闭包探究一二

    复习 python引用变量的顺序: 当前作用域局部变量 -> 外层作用域变量 -> 当前模块中的全局变量 -> python内置变量 global:声明一个全局变量 nonlocal ...

  7. python闭包怎么理解_Python:闭包的理解

    很多函数型的语言都有闭包这一概念,比如python的兄弟js. 人们刚听到闭包这一概念总会觉得它很晦涩,难以理解.其实不然,主要是他的名字起得太抽象了,让人误以为很难. 下面举一个例子: #codin ...

  8. python中闭包的作用_Python闭包及其作用域

    Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...

  9. python闭包修改全局变量_Python 闭包

    外函数和内函数 如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数. 闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的 ...

最新文章

  1. oracle每一行的hash值,Hash分区表分区数与数据分布的测试
  2. boost::log::sinks用法的测试程序
  3. OutLook最小化到托盘
  4. 通信工程施工设计纲领文件
  5. 本地执行php查看内存占用,查看页面执行php占用内存情况
  6. http中指定使用worker/prefork
  7. 【操作系统】进程调度的不同层次
  8. 蚂蚁员工人均都能买一套杭州的房子了?!加油啊,打工人!
  9. 通过PEB遍历进程模块(x64/wow4)
  10. 微博爬虫 ----- 微博发布时间清洗
  11. CUDA+cuDNN下载安装(配备GPU环境)
  12. 杭州电子科技大学acm--2020
  13. 【Ubuntu】QT程序 could not find or load the Qt platform plugin “xcb“ in “报错解决
  14. Git 版本回退方法
  15. 常见的计算机网络安全威胁的表现形式,网络安全威胁的的表现形式有哪些?
  16. 18100出多少取整_电子表格里小数取整用什么公式?
  17. java poi导出PPT格式
  18. 什么是蛋白质结构域?什么是HTH?
  19. 利用python从网络上爬取图片_一篇文章教会你利用Python网络爬虫抓取王者荣耀图片...
  20. 数据与计算机通信实验报告,完整版通信工程专业综合实验报告

热门文章

  1. java 二叉查找树_如何在Java中实现二叉搜索树( binary search tree)?
  2. 萤石微信支付对接(小程序版)
  3. [QQ机器人]Nonebot2 翻译插件
  4. 哪个蓝牙耳机性价比最高、蓝牙耳机性价比高的品牌
  5. 最全软件测试面试问题和回答,全文背熟不拿下offer算我输!
  6. 大数据运维--Linux安装java
  7. 信号的上升时间和传输延时
  8. WLAN实验-旁挂三层组网隧道转发
  9. 5G代时,华为手机超越苹果是大概率事情
  10. corelDRAW(cdr)使用