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().但你也可 ...
随机推荐
- ETL之apache/hop-web 2.5安装和简单入门
一.使用Docker 安装部署 1.拉取镜像 推荐使用下面的web版本 docker pull apache/hop:latest docker pull apache/hop-web:latest ...
- TienChin 活动管理-删除活动
后端 ActivityController.java @PreAuthorize("hasPermission('tienchin:activity:remove')") @Log ...
- 6.3 Windows驱动开发:内核枚举IoTimer定时器
今天继续分享内核枚举系列知识,这次我们来学习如何通过代码的方式枚举内核IoTimer定时器,内核定时器其实就是在内核中实现的时钟,该定时器的枚举非常简单,因为在IoInitializeTimer初始化 ...
- Win32汇编:数组与标志位测试总结
整理复习汇编语言的知识点,以前在学习<Intel汇编语言程序设计 - 第五版>时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会 ...
- WebAssembly入门笔记[4]:利用Global传递全局变量
利用WebAssembly的导入导出功能可以灵活地实现宿主JavaScript程序与加载的单个wasm模块之间的交互,那么如何在宿主程序与多个wasm之间传递和共享数据呢?这就需要使用到Global这 ...
- 2024-01-31:用go语言,机器人正在玩一个古老的基于DOS的游戏, 游戏中有N+1座建筑,从0到N编号,从左到右排列, 编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位, 起
2024-01-31:用go语言,机器人正在玩一个古老的基于DOS的游戏, 游戏中有N+1座建筑,从0到N编号,从左到右排列, 编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位, 起 ...
- 进程状态|操作系统|什么是pcb|什么是僵尸进程 |什么是孤儿进程 【超详细的图文解释】【Linux OS】
说在前面 今天给大家带来操作系统中进程状态的详解. 本篇博主将通过从进程状态的广泛概念,深入到Linux操作系统详细的一些进程状态.在解释进程状态的过程中,博主还会穿插一些操作系统一些重要概念!本篇干 ...
- C#/.NET该如何自学入门?
前言 随着DotNetGuide技术社区交流群的不断壮大(目前4个群都已经满500人,已开5群现已有180多个小伙伴),越来越多应届生和其他领域的小伙伴加入了我们这个大家庭.在此期间我在个人微信.公众 ...
- Python-集合的基本操作(set)
1. 前言 python中的集合和数学里的类似也是用于存放不重复的元素,它有可变集合(set)和不可变集合(feozenset)两种,集合的所有元素都放在一对大括号"{}"里(列表 ...
- Linux 列出文件的绝对路径
1.使用ls中列出文件的绝对路径ls | sed "s:^:`pwd`/:" 2.列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归find $PWD -maxd ...