博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第八章、函数进阶之闭包函数01
阅读量:5292 次
发布时间:2019-06-14

本文共 1208 字,大约阅读时间需要 4 分钟。

目录

第八章、函数进阶之闭包函数01

回顾

函数对象:可以将定义在函数内的函数返回到全局使用,打破了函数的层级限制

名称空间与作用域:作用域关系在函数定义阶段就已经固定死了,与调用位置无关,在任意位置调用函数都需要跑到定义函数时找到作用域关系

def f1():    x = 1    def inner():        print(x)    return innerfunc = f1()func()x = 2def f2():    x = 3    func()f2()
11

一、什么是闭包

闭包:函数内部函数对外部作用域而非全局作用域的引用

def outter():    x = 1    def inner():        print(x)    return innerf = outter()def f2():    x = 2    f()f2()

1.1 两种为函数传值的方式

为函数传值的方式一:使用参数的形式

def func(x):    print(x)func(1)func(1)func(1)

为函数传值的方式二:包给函数

def outter():    def inner():        print(x)    return innerf = outter(1)f()f()f()# 查看闭包的元素print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}")

二、闭包函数的应用

闭包的意义:返回的函数对象,不仅仅是一个函数对象,还在函数外包裹了一层作用域,这就使得这个函数无论在哪调用,都优先使用自己外层包裹的作用域。

应用领域:延迟计算、爬虫

def get_res(url):        responce=requests.get(url)        print(responce.content)        print(responce.text)get_res("http://www.baidu.com")get_res("http://www.baidu.com")

闭包可以简化代码

import requestsdef func(url):    def get_res():        responce=requests.get(url)        print(responce.content)        print(responce.text)    return get_resbaidu_spider=func("http://www.baidu.com")baidu_spider()baidu_spider()

转载于:https://www.cnblogs.com/demiao/p/11340283.html

你可能感兴趣的文章
ccf 出现次数最多的数
查看>>
单例模式
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
HDUOJ ------1398
查看>>
cf--------(div1)1A. Theatre Square
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
Tomcat 报错的解决方法:The APR based Apache Tomcat Native library which allows optimal
查看>>
最长公共子串问题(LCS)
查看>>
TortoiseSVN is locked in another working copy
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
Html学习_简易个人网页制作
查看>>
angular中ng-bind指令小案例
查看>>
jqery总结
查看>>
Lodop获取客户端主网卡ip地址是0.0.0.0
查看>>
VSCODE更改文件时,提示:EACCES: permission denied的解决办法(mac电脑系统)
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
微信小程序开发初体验
查看>>
dos批处理(bat)运行exe
查看>>