首页 > 其他分享 >对象与闭包函数

对象与闭包函数

时间:2023-12-13 21:33:35浏览次数:22  
标签:闭包 return 函数 对象 add func def

对象与闭包函数

一、函数对象

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

[1]函数可以被引用

  • 函数的调用方式中使用表到时,将地址给到其他变量名就是引用
def add(x, y):
    return x + y


add_1 = add

z = add_1(1, 2) # 将函数地址给z变量名
print(z)

[2]函数可以作为容器类型的元素

def add(x, y):
    return x + y


def subtract(x, y):
    return x - y

#可以做为字典里的值
dict_fun = {1: add, 2: subtract}
func_id = int(input("请输入ID:"))  # 请输入ID:1
func = dict_fun[func_id]
print(func(5, 4))  # 9

[3]函数可以作为参数传入传入另一个函数

def add(x, y):
    return x + y


def subtract(x, y):
    return x - y

# add作为subtract函数的一个参数
print(subtract(add(4, 5), 5))  # 4

[4]函数的返回值可以是一个函数

def outer():
    print("这是外层函数!", end=' ')

    def inner():
        print("这是内层函数!")

    return inner

# 用变量接收返回的函数
func = outer()
func()  # 这是外层函数! 这是内层函数!

二、闭包函数

[1]什么是闭包

  • 闭包是指包含对自由变量的函数和对这些变量的引用环境的组合。
  • 基于函数对象的概念,可以将函数返回到任意位置去调用
  • 但作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。

[2]什么是闭包函数

  • 一个引用了外层函数作用域里的变量的内嵌函数
a = 1


def outer():
    a = 2

    def inner():
        print(a)

    return inner

#inner()函数引用了外部函数outer()作用域里的变量,使用inner()函数就是一个闭包函数
func = outer()
func()  # 2

[3]闭包函数的用途

(1)保持状态

  • 保持状态: 闭包可以用来保持函数调用之间的状态。

(2)函数工厂

  • 函数工厂: 闭包允许创建函数工厂,即可以动态生成函数。
  • 在你的例子中,page 函数就是一个函数工厂,它返回一个根据传入的 url 动态生成的函数

(3)封装

  • 封装: 闭包可以用来实现类似面向对象编程中的封装概念。
  • 通过将函数和其相关的状态(变量)捆绑在一起,形成一个封闭的单元。

标签:闭包,return,函数,对象,add,func,def
From: https://www.cnblogs.com/taoyuanshi/p/17899965.html

相关文章

  • 函数
    函数一、函数的引入和介绍一个项目中往往有着许多的功能需要实现,而有些功能的代码需要重复使用,每次使用都要在复现一遍,这样会使得代码变的冗长当某个功能代码需要修改时,我们又需要找出整个程序中使用过的地方进行修改,这样的代码维护起来也非常难所以我们就需要一个能整合这些......
  • 无涯教程-Java - max()函数
    此方法给出两个参数中的最大值。参数可以是int,float,long,double。max()-语法此方法具有以下变体-doublemax(doublearg1,doublearg2)floatmax(floatarg1,floatarg2)intmax(intarg1,intarg2)longmax(longarg1,longarg2)max()-返回值此方法返回两个参数......
  • 无涯教程-Java - min()函数
    该方法给出两个参数中较小的一个。参数可以是int,float,long,double。min()-语法此方法具有以下变体-doublemin(doublearg1,doublearg2)floatmin(floatarg1,floatarg2)intmin(intarg1,intarg2)longmin(longarg1,longarg2)min()-返回值此方法返回两个参......
  • c语言中的memste函数
    当我们在编程中需要对内存进行操作时,就会用到memste函数。memste函数是C语言中的一个标准库函数,用于将指定的内存块设置为指定的值。memste函数的原型为:void*memste(void*ptr,intvalue,size_tnum);其中,ptr是要设置的内存块的起始地址,value是要设置的值,num是要设置的字节数。......
  • 常用损失函数
    常用损失函数目录损失函数的意义均方误差(MSE)计算方法适用场景代码均方根误差(RMSE)计算方法使用场景代码平均绝对误差(MAE)计算方法适用场景代码交叉熵损失计算方法适用场景代码对数似然损失计算方法适用场景代码余弦相似度损失(CSL)......
  • 无涯教程-Java - rint()函数
    rint方法返回值最接近参数的整数。rint()-语法doublerint(doubled)这是参数的详细信息-d  - 它接受双精度值作为参数。rint()-返回值此方法返回值最接近参数的整数。rint()-示例publicclassTest{publicstaticvoidmain(Stringargs[]){do......
  • C++ 析构函数 virtual 虚析构
    结论:当父类存在virtual函数时,则需要实现虚析构函数。直接上代码:#include<iostream>#include<memory>classAAA{public:AAA(){printf("AAA构造...\n");}//virtual~AAA(){printf("AAA析构...\n");}virtualvoidSayOk()=0;};cl......
  • 无涯教程-Java - toString()函数
    该方法用于获取表示Number对象值的String对象。toString()-语法以下是此方法的所有变体-StringtoString()staticStringtoString(inti)这是参数的详细信息-i   - 将为其返回字符串表示形式的int。toString()-返回值toString()     - 这将返......
  • java 面向对象:类
    免责声明:java基础资料均来自于韩顺平老师的《循序渐进学Java零基础》教案,具体视频内容可以去B站观看,这些资料仅用于学习交流,不得转载用于商业活动1.java面向对象:类类与对象释义:类是抽象的,概念的,代表一类事物。例如人类,宠物类,即它是数据类型对象是具体的,实际的,代表一个具体的......
  • pytest框架学习-pytest_addoption钩子函数
    适用场景:一套自动化代码,多套环境。pytest_addoption允许用户自定义注册一个命令行参数,方便用户通过命令行参数的形式给pytest传递不同的参数进行不同测试场景的切换。pytest_addoption钩子函数一般和内置fixturepytestconfig配合使用,pytest_addoption注册自定义的命令......