【一】函数对象

  • 函数对象指的是函数可以被当做 数据 来处理,具体可以分为四个方面的使用

【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函数对象与闭包函数的更多相关文章

  1. python中的函数对象与闭包函数

    函数对象 在python中,一切皆对象,函数也是对象 在python语言中,声明或定义一个函数时,使用语句: def func_name(arg1,arg2,...): func_suite 当执行流 ...

  2. day16 函数对象与闭包函数

    目录 一.函数对象 1.1函数可以被引用 1.2函数可以作为容器类型的元素 1.3函数可以作为参数传入另外一个函数 1.4函数的返回值可以是一个函数 二.闭包函数 1 什么是闭包函数 2 闭包函数的用 ...

  3. Python(2.7.6) 函数对象与闭包

    在 Python 中,一切皆对象.函数也是对象,它可以赋值给其他变量,也可以当作参数传递. lambda 表达式可以创建函数对象,在 Python 中,lambda 表达式的函数体只能有唯一的一条语句 ...

  4. python函数对象和闭包

    关于函数对象和闭包 闭包(closure)是函数式编程的重要的语法结构.不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看 ...

  5. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

  6. Python 空间名称与闭包函数

    空间名称与闭包函数 名称空间 名称空间 namespaces:存放名字的地方,是对栈区的划分 名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字 内置名称空间 存放的名字: ...

  7. python基础语法7 闭包函数与装饰器

    闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...

  8. 18.C++-[ ]操作符使用 、函数对象与普通函数区别(详解)

    在上章17.C++-string字符串类(详解)学习了string类,发现可以通过[ ]重载操作符来访问每个字符. 比如: string s="SAD"; for(int i=0, ...

  9. Python中的函数对象与闭包

    函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 #foo.py def callf(func): ...

  10. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

随机推荐

  1. TienChin-系统功能介绍

    线索管理 添加线索 查看线索 删除线索 修改线索 分配线索: ​将录入到系统的线索,分配给某一个市场专员去处理 跟进线索: ​持续跟进一条线索 1.判断是否伪线索 2.持续跟进,每次跟进需要有记录 3 ...

  2. linux下面权限的含义以及修改

    linux中的权限 前言 数字权限 三位数字权限 读(r) 写(w) 执行(x) 无权限(-) 三位数字权限的转换 如何设置权限 最高位的含义 四位数字权限 SUID SGID SBIT 四位数字权限 ...

  3. Python 原生Socket实现端口扫描

    端口扫描,就是逐个对一段端口或指定的端口进行扫描.通过扫描结果可以知道一台计算机上都提供了哪些服务,Python中使用Socket即可实现对特定端口的探测,以及对C段的扫描. 扫描目标主机Banner ...

  4. Java实现将中缀表达式转换到后缀表达式

    思路: 1.初始化两个栈 运算符栈 s1 和储存中间结果栈 s22. 从左到右扫描中缀表达式3. 遇到操作数时 压入s24. 遇到操作符 o1 时 比较其与 S1 栈顶运算符的优先级 1)如果s1为空 ...

  5. 转换流(InputStreamReader OutputStreamWriter)

    1.字节输出转换流(OutputStreamWriter) 1 package iochange; 2 3 import java.io.*; 4 5 /* 6 java.io.OutputStrea ...

  6. 【动态内存】C语言动态内存使用常见错误及其避免方法(初学者避雷)

    C语言动态内存使用常见错误及其避免方法(初学者动态内存避雷手册) 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要 ...

  7. RabbitMQ初学

    RabbitMQ 消息队列在软件中的应用场景 异步处理上(优于原先的方式) 为什么优于呢? 首先,通常情况下,如上图我们其实不用消息队列的情况下,其实也可以不用100ms,不用allof即可 那么优势 ...

  8. Python 字典与集合

    字典(Dictionary) 字典介绍 字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:"键对象"和"值 ...

  9. .net core微服务之网关

    网关: 一:apisix doc:https://apisix.apache.org/zh/docs/apisix/getting-started/README/ github:https://git ...

  10. NC13611 树

    题目链接 题目 题目描述 shy有一颗树,树有n个结点.有k种不同颜色的染料给树染色.一个染色方案是合法的,当且仅当对于所有相同颜色的点对(x,y),x到y的路径上的所有点的颜色都要与x和y相同.请统 ...