Python函数对象与闭包函数
【一】函数对象
- 函数对象指的是函数可以被当做
数据
来处理,具体可以分为四个方面的使用
【1】函数可以被引用
def add(x,y):
return x + y
func = add
res = func(1,2)
print(res)
【2】函数可以作为容器类型的元素
def add(x,y):
return x + y
dic = {'add':add,'max':max}
print(dic)
res = dic['add'](1, 2)
print(res) # 3
【3】函数可以作为参数传入另外一个参数
def add(x,y):
return x + y
def foo(x,y,func):
return func(x,y)
res = foo(1,2,add)
print(res)
【4】函数的返回值可以是一个函数
def add(x,y):
return x + y
def bar():
return add()
func = bar()
print(func)
res = func(1,2)
print(res)
【二】闭包函数
- 闭包是指包含对自由变量的函数和对这些变量的引用环境的组合。
- 基于函数对象的概念,可以将函数返回到任意位置去调用
- 但作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。
x_global = 1
def outer():
def inner():
print(x_global)
return inner
def func():
x_func = 3
inner = outer()
inner()
func()
【1】什么是闭包函数
- 也就是说函数被当做数据处理时,始终以自带的作用域为准。
- 若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用
- 那么该’内嵌函数’就是闭包函数,简称闭包(Closures)
x_global = 1
def outer():
x_global = 2
def inner():
print(x_global)
return inner
func = outer()
func()
【2】如何查看闭包函数所包裹的外部变量
x_global = 1
def outer():
# 定义局部变量,覆盖全局变量
x_global = 2
def inner():
# 打印外部函数的局部变量
print(x_global)
return inner
func = outer()
func()
【3】闭包函数用途
(1)将值以参数的形式传入
import requests
def get(url):
return requests.get(url).test
(2)将值包给函数
import requests
def page(url):
def get():
return requests.get(url).test
return get
(3)函数工厂
import requests
# 将值包给函数
def page(url):
def get():
return requests.get(url).text
return get
python = page('https://www.python.org')
java = page('https://www.java.com')
(4)封装
def counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter1 = counter()
counter2 = counter()
print(counter1()) # 1
print(counter1()) # 2
print(counter2()) # 1
Python函数对象与闭包函数的更多相关文章
- python中的函数对象与闭包函数
函数对象 在python中,一切皆对象,函数也是对象 在python语言中,声明或定义一个函数时,使用语句: def func_name(arg1,arg2,...): func_suite 当执行流 ...
- day16 函数对象与闭包函数
目录 一.函数对象 1.1函数可以被引用 1.2函数可以作为容器类型的元素 1.3函数可以作为参数传入另外一个函数 1.4函数的返回值可以是一个函数 二.闭包函数 1 什么是闭包函数 2 闭包函数的用 ...
- Python(2.7.6) 函数对象与闭包
在 Python 中,一切皆对象.函数也是对象,它可以赋值给其他变量,也可以当作参数传递. lambda 表达式可以创建函数对象,在 Python 中,lambda 表达式的函数体只能有唯一的一条语句 ...
- python函数对象和闭包
关于函数对象和闭包 闭包(closure)是函数式编程的重要的语法结构.不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看 ...
- Python之旅Day4 闭包函数 模块及模块倒入
闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...
- Python 空间名称与闭包函数
空间名称与闭包函数 名称空间 名称空间 namespaces:存放名字的地方,是对栈区的划分 名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字 内置名称空间 存放的名字: ...
- python基础语法7 闭包函数与装饰器
闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...
- 18.C++-[ ]操作符使用 、函数对象与普通函数区别(详解)
在上章17.C++-string字符串类(详解)学习了string类,发现可以通过[ ]重载操作符来访问每个字符. 比如: string s="SAD"; for(int i=0, ...
- Python中的函数对象与闭包
函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 #foo.py def callf(func): ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
随机推荐
- 微信小程序-双线程渲染模型
微信小程序双线程渲染模型 小程序的运行环境分成渲染层和逻辑层: WXML 模板和 WXSS 样式工作在渲染层,通过 WebView 进行渲染 小程序会为每一个界面都创建一个 WebView 来渲染这个 ...
- WebAssembly入门笔记[3]:利用Table传递引用
在<WebAssembly入门笔记[2]>中,我们介绍了如何利用Memory在作为宿主的JavaScript应用和wasm模块之间传递数据,但是Momory面向单纯二进制字节的读写在使用起 ...
- 设计模式学习-使用go实现状态模式
状态模式 定义 优点 缺点 适用范围 代码实现 参考 状态模式 定义 状态模式(state):当一个条件的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对 ...
- tensorflow语法【tf.matmul() 、loc和iloc函数、tf.expand_dims()】
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- C# 语言程序设计笔记
C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领 ...
- CE修改器入门:运用代码注入
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大. 代 ...
- Linux服务器Crontab定时任务配置
1.检查linux系统是否有crontab rpm -qa | grep crontab 2.如果未安装进行安装 yum -y install vixie-cron yum -y install cr ...
- 双层nn逻辑回归BP过程的另外一种解释
双层nn逻辑回归 吴恩达的双层nn逻辑回归的一些符号说明比较复杂导致视频难以理解,这里简单做一个说明 注意:阅读下面内容需要具备基本的矩阵求导知识 下面是手推过程,有空在进行修改
- Android Graphics 显示系统 - 如何模拟多(物理)显示屏?
" 本着花小钱办大事,不花钱也办事的原则,为了避免花钱买设备,那如何更便捷地学习/测试Android多屏显示的内容呢?本文就给大家介绍一种模拟Android多个物理屏幕显示的方法." ...
- NC24961 Hotel
题目链接 题目 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and ...