首页 > 编程语言 >【Python基础】函数进阶(匿名函数、装饰器、闭包等)

【Python基础】函数进阶(匿名函数、装饰器、闭包等)

时间:2024-01-11 16:44:19浏览次数:22  
标签:闭包 return 函数 Python 装饰 def lambda

简介

函数进阶的使用,包括匿名函数、装饰器、闭包等

匿名函数

指函数是没有函数名称的,临时使用的微函数。使用 lambda 表达式
来声明,语法格式如下:
lambda [arg1 [arg2 , ... , argn] ] : 表达式

*  [arg1 ,arg2 , ... , argn ] 为函数的参数列表,可有可无。
* 表达式: 表示函数体,必须有返回值
* 注意:lambda 表达式只可以包含一个表达式,计算结果可看作是一个函数的返回值。虽然不允许包含复杂的语句,但表达式可以调用其它函数。
sum =lambda x,y: x+y
print(sum(5,10))

已上代码相当于

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

lambda 表达式声明的匿名函数,也可以作为自己定义函数的实参

带判断的lambda

lambda 表达式声明的匿名函数,也可以作为内建函数的实参

闭包

如果内层函数引用了外层函数的变量(包括其参数),并且外层函数返回内层函数名,这种函数架构称为闭包。闭包满足的如下3个条件:

  1. 内层函数的定义嵌套在外层函数中。
  2. 内层函数引用外层函数的变量
  3. 外层函数返回内层函数名
    例如:
list =["小C学安全","python","java"]

def a(list):
    def b():
        return print(list[0])
    return b

c =a(list)
c()

装饰器

装饰器本质上还是函数,让其它的函数在不做任何代码修改的情况下,增加额外的功能
概念:一个以函数作为参数并返回一个替换函数的可执行函数。装饰器的本质是一个嵌套函数,外层函数的参数是被执行的函数,内层函数是一个闭包并在其中增加新功能(装饰器的功能函数)

def test1(test3):
    def test2():
        return test3()
    return test2
@test1
def test3():
    print("输出test3()函数")
    return 1
print(test3())

#输出test3()函数
#1

通过@符号和装饰器名实现装饰器函数与被装饰函数联系,当调用func()函数时,程序会自动调用装饰器函数的代码

偏函数

在复用函数的情况下,有时我们在使用已有函数时,可能会固定其中的部分参数,可以使用默认值参数外,还可以使用偏函数,用来固定函数调用时部分或全部参数的函数叫做偏函数

def add1(a, b, c):
   return a + b + c
def add2(a, b):
  return add1(a, b, 10) # 参数c 为固定的参数。
  print(add2(1, 2))

关注公共号

标签:闭包,return,函数,Python,装饰,def,lambda
From: https://www.cnblogs.com/fuchangjiang/p/17958874

相关文章

  • Java递归函数计算递归次数出错
    背景:构造组织架构树时,使用了递归填充子节点,为防止环状的错误数据导致递归无法结束,记录递归的次数,超过一定数量后终止递归问题:用户记录递归次数的变量在节点跳转的时候被重新赋值,无法正确记录 publicDepartgenDepartTreeFromRoot()throwsException{Departroot=De......
  • 【学习笔记】概率生成函数
    概述用生成函数刻画一些困难的概率期望问题,使用一些朴素的数学技巧来解出答案。设\(F(x)\)为概率生成函数,定义为:\[F(x)=\sum_{i\ge0}P(X=i)x^i\]容易发现\(F(1)=1\)。将\(F(x)\)求导得到:\[F'(x)=\sum_{i\ge0}iP(X=i)x^{i-1}\]容易发现\(E(X)=F'(1)=1\)。同时根据......
  • EXECL函数
    1COUNTIF对比两列数据,有相同的即计为1找一列空白列,输入=COUNTIF(范围,条件),按回车,然后再点击表格右下角的"+"就可以拉动持续执行这个函数 2CONCATENATE添加字符串,可添加多个 ......
  • 无涯教程-Redis - DEBUG SEGFAULT 命令函数
    RedisDEBUGSEGFAULT执行的无效内存访问使Redis崩溃,它用于在开发过程中模拟错误。DEBUGSEGFAULT-语法以下是RedisDEBUGSEGFAULT命令的基本语法。redis127.0.0.1:6379>DEBUGSEGFAULTDEBUGSEGFAULT-示例redis127.0.0.1:6379>DEBUGSEGFAULTCouldnotcon......
  • 闭包与装饰器
    闭包,又称闭包函数或者闭合函数,闭包函数就是指在一个嵌套函数里的内层函数,然后用内层函数来操纵外层函数的数据1.闭包函数点击查看代码defout_fun():#外层函数defin_fun():#内层函数print(10)returnin_fun#外层函数返回值,返回的是内层函数本......
  • 无涯教程-Redis - DBSIZE 命令函数
    RedisDBSIZE命令用于获取所选数据库中的键(key)数。DBSIZE-语法以下是RedisDBSIZE命令的基本语法。redis127.0.0.1:6379>DBSIZEDBSIZE-示例redis127.0.0.1:6379>DBSIZE(integer)147参考链接https://www.learnfk.com/redis/server-dbsize.html......
  • python代码规范pep8
    python代码规范pep8  1.pep8介绍2.pep8安装配置3.pep8安装问题 1、pep8介绍pep8是python编码规范 2、pep8安装配置121.pycharm安装PEP8:pipinstallautopep82.File->settings->Tools->ExternalTools ->点击+配置.png123453.Name......
  • python基础之list、tuple、dict、set
    python基础,list,tuple,dict,set比较1.list:list是一种有序的集合,可以随时添加和删除其中的元素。用len()函数可以获得list元素的个数.list是一个可变的有序表>>>classmates=['Michael','Bob','Tracy']>>>len(classmates)3>>>classmates[0]//用......
  • 利用Python和fake_useragent模拟不同浏览器访问
    在Python中,您可以使用requests库来发送HTTP请求,并使用UserAgent对象设置请求头中的User-Agent字段,以模拟不同浏览器或设备。以下是一个示例代码,演示如何使用requests库和fake_useragent库获取https://www.mafengwo.cn/网页的内容:首先,确保您已经安装了requests和fake_useragent库,您......
  • Python Flask 返回函数 、带值的函数
    前言全局说明一、安装flask模块官方源:pip3installflask==2.3.2国内源:pip3installflask==2.3.2-ihttp://pypi.douban.com/simple/--trusted-hostpypi.douban.com以上二选一,哪个安装快用哪个flask安装时间2023-11更多国内源:https://www.cnblogs.com/wutou......