函数对象:

函数是第一类对象

第一类对象:

指可以在执行期创造并作为参数传递给其他函数或存入一个变量的实体

第一类对象所特有的特性为:

可以当容器被存入变量或其他结构

可以被作为参数传递给其他函数

可以被作为函数的返回值

可以在执行期创造,而无需完全在设计期全部写出

即使没有被系结至某一名称,也可以存在

函数、类、模块等所有对象都是第一类的

闭包函数:

内部函数

函数内定义的函数为内部函数

闭包函数

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

定义闭包函数的基本形:

def 外部函数名():

内部函数需要的变量

def 内部函数():

引用外部变量

return 内部函数

----------------------------------------------------------

# 举例

def f1():

x=1

def f2():

print(x)

return f2

f = f1()

print(f) # .f2 at 0x00000189C2226158>

f()

print(f.c.__closure__[0].cell_contents) # 查看闭包元素 闭包函数都有 __closure__ 方法

# 这里内部函数f2打印x,f2中没有变量x,去上一层找,找到f1中的x,然后打印,这里的 f 就是闭包函数,包含了对f1中x的引用

闭包特点

返回的函数对象,不仅仅是一个函数对象,该函数外还包裹了一层作用域,这使得该函数无论在何处调用,优先使用自己外层包裹的作用域,也就是说永远携带着一种状态

拿到函数的内存地址后,想什么时候用就什么时候用,一种惰性计算

闭包函数和作用域:

money = 666

def foo(name):

print(‘%s have %s money‘ %(name,money))

def foo1():

money = 999

foo(‘shuai‘)

foo1() # shuai have 666 money

# 这里打印不会是999,函数在定义时就已经确定了作用域,所以当doo函数内没有money时,会去找全局的money

闭包函数让我始终有着一笔钱

money = 888

def func1():

name = ‘shuai‘

def func():

money = 666

def foo():

print(‘%s have %s money‘ %(name,money))

return foo

return func

f = func1()

f1 = f()

def foo1():

money = 999

f1()

foo1()

# 包了两层

# 先看func1和func,这两个函数返回闭包函数 func,包含了 name

# func 和 foo ,这俩函数返回闭包函数 foo,包含了 money

# f = func1() 拿到 func,再执行f1 = f() 拿到 foo

简单应用:

from urllib.request import urlopen

def get(url):

return urlopen(url).read()

print(get(‘http://www.xiaohua100.cn‘))

# 获取校花网信息

# 问题:每次都要传url,网站过多,url是没法记住的

# 闭包应用

from urllib.request import urlopen

def index(url):

def get():

return urlopen(url).read()

return get

xiaohua = index(‘http://xiaohua100.cn‘)

print(xiaohua())

jidong = index(‘https://www.jd.com/‘)

print((jidong()))

# 这样想要下载哪个就执行哪个,不用就放着,并且不用传url;

闭包函数python_Python--函数对象闭包函数相关推荐

  1. strftime函数python_PyThon中time strftime()函数用法

    Python有很多好用的函数,其中在time库里,strftime()函数是经常被用到的,而大部分人对strtime的使用似懂非懂,今天小编一篇文章教大家看懂. 一.Python time strft ...

  2. 文件函数python_Python 基础之文件 函数

    今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...

  3. dir函数python_Python dir()函数

    dir函数python Python dir() function attempts to return a list of valid attributes for the given object ...

  4. eval函数python_Python eval()函数

    eval函数python Python eval() function is used to parse an expression string as python expression and t ...

  5. len函数python_Python len()函数

    len函数python Python len() function returns the length of the object. Generally, len() function is use ...

  6. time函数python_Python连载6-time包函数简介

    一.接连载5中time模块 1.函数:altzone (1)含义:获取当前时间与UTC时间相差的秒数,再有夏令时的情况下. (2)格式:time.altzone 2.函数:daylight (1)含义 ...

  7. if函数python_python入门(if函数)

    今天我们讲的是if函数,这一章稍微有一点逻辑性但是我保证他不会很难. if语句 首先我们需要知道if函数是怎么工作的.首先我们先给条件,如果条件满足感就做什么.(if conditional test ...

  8. 实现isnum函数python_python 学习 实现isOdd函数 实现isNum()函数 实现multi() 实现isPrime() 格式化输出日期DAY16...

    1.实现isOdd()函数 def isOdd(num): if num % 2 == 0: return True else: return False n = eval(input()) prin ...

  9. print函数python_Python学习之print()函数

    print()函数的主要功能就是打印内容. 注意,在正式敲代码之前,必须切换成英文输入状态,保证print()函数的括号是用[英文括号],不然会报错

最新文章

  1. 在微信小程序里自动获得当前手机所在的经纬度并转换成地址
  2. Spring(十二)之JDBC框架
  3. 人活着系列之芳姐和芳姐的猪(Floyd)
  4. cmd命令重定向到剪切板
  5. Vue还有这种骚操作?浅析几个新手常常忽略的API
  6. Apache 服务器端安装配置(Windows版本)
  7. 开源字符处理类库:CharString类 拆分自自己研发的web服务器中的类库
  8. 牛客多校第五场B generator1(十进制矩阵快速幂)题解
  9. redis设计与实现读书笔记(一)
  10. delphi 获取硬盘序列号、cpu号、bios号、网卡号
  11. @PostConstruct @DependsOn
  12. python条形图y轴_python 中条形图绘制
  13. 微信小程序连接emqx服务器实现数据交互
  14. vite alias配置路径地址别名
  15. 记录Apollo配置时naming-strategy 不起作用
  16. 高维向量的相似度判定-距离产生了,美还在吗
  17. Windows程序设计-09-COM技术
  18. PHP的ES入门(三)—— 数据查询
  19. 【一致性仿真】Group-Bipartite Consensus in the Networks With Cooperative-Competitive Interactions
  20. 调教“光盘刻录大师”之“视频截取”

热门文章

  1. python运行过程中会被编译成二进制_Python代码在运行过程中,会被编译成二进制代码。_学小易找答案...
  2. python templates_详解Python的Django框架中的templates设置
  3. Jmeter之创建Kafka生产者和消费者进行性能测试
  4. flask_sqlalchemy连接Mysql报TypeError: create_engine() got an unexpected keyword argument 'encoding'解决办法
  5. 简评file_get_contents与curl 效率及稳定性
  6. cdh的hive配置文件位置_CDH6配置 Atlas,及 Hive Hook
  7. vscode 默认初始化_VSCode设置初始化模板
  8. laravel $request 多维数组取值_Laravel 运行原理分析与源码分析,底层看这篇足矣
  9. linux shell 变量减法_第四章 shell和环境变量
  10. 空气培养皿采样后保存_环境监测基础知识——环境空气监测技术之布点采样