匿名函数

可以只有一个入参或多个入参,但返回值只能是一个函数

#普通函数
def sum(a,b):
return a+b
#等价的匿名函数
add = lambda a,b: a+b

 闭包

举一个平均值的例子:

根据例子我们发现,每次调用make_avg(),都会返回averager函数对象

#使用可调用实例去实现
class Avg:
def __init__(self):
self.list=[]
def __call__(self, new_value):
self.list.append(new_value)
total= sum(self.list)
return total / len(self.list) avg=Avg()
print(avg(10))
print(avg(11))
#使用闭包实现
def make_avg():
_list=[]
def averager(new_value):
_list.append(new_value)
total = sum(_list)
return total / len(_list)
return averager avg1=make_avg()
print(avg1(10))
print(avg1(11))

  注:上面闭包中的_list属于自由变量,因为list是可变数据类型,如果遇到不可变数据类型,就需要用到nonlocal

  举个例子:还是上面的求平均值,但是现在我们不保存每次存入的数据,只保存获取到的次数和历史和

因为数字,元祖,字符串属于不可变类型,在averager中想给不可变量赋值,会把变量变成局部变量,这种情况下需要使用nonlocal,把变量标记为自由变量

def make_avg():
count = 0
total = 0
def averager(new_value):
nonlocal count,total
count +=1
total +=new_value
return total / count
return averager

装饰器

装饰器万能等价公式:

被装饰函数名 = 装饰器(被装饰函数名)

time = cal_time(time)

time会作为参数传入cal_time,然后cal_time返回wrapper的函数每次调用time(),执行的都是wrapper()

#举个例子:计算运行时间的装饰器
import time
def cal_time(func):
def wrapper(*args,**kwargs):
t1=time.time()
result=func(*args,**kwargs)
t2=time.time()
print("%s running time: %s secs." % (fun.__name__,t2-t1))
return result
return wrapper @cal_time
def time():
pass

  

python函数:匿名函数,闭包,装饰器的更多相关文章

  1. python 函数名 、闭包 装饰器 day13

    1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...

  2. python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)

    一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...

  3. 【Python入门学习】闭包&装饰器&开放封闭原则

    1. 介绍闭包 闭包:如果在一个内部函数里,对在外部作用域的变量(不是全局作用域)进行引用,那边内部函数被称为闭包(closure) 例如:如果在一个内部函数里:func2()就是内部函数, 对在外部 ...

  4. python基础语法_9-1闭包 装饰器补充

    1.闭包的概念 closure:内部函数中对enclosing作用域的变量进行引用,外部函数返回内部函数名   2.函数实质与属性 函数是一个对象:在内存中有一个存储空间 函数执行完成后内部变量回收: ...

  5. Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器

    函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  6. Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数

    Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...

  7. python函数闭包-装饰器-03

    可调用对象 callable()  # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即  callable(对象)  返回为  True  的对象 x = 1 print(cal ...

  8. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  9. Python【第四篇】函数、内置函数、递归、装饰器、生成器和迭代器

    一.函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 1.定义 def 函数名(参数): ...

  10. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

     1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...

随机推荐

  1. 【JAVA基础】MySQL配置

    mySQL配置 数据库连接 初始化配置 --创建用户 并授权 create user 'injasup'@'%' identified by 'supplier@2023#!'; GRANT SELE ...

  2. 安装vue脚手架@vue/cli 4.5.13(稳定版)

    若 NPM 下载过慢,请参考本处改换镜像源:Here 首先新建一个 vue 测试项目,还记得以前自己是用 vue-cli 2.0的版本 去构建的,毕竟里面有默认配置好的webpack配置,但现在很多小 ...

  3. Codeforces Round #716 (Div. 2) A ~ D 个人题解

    补题链接:Here 1514A. Perfectly Imperfect Array 题意:给定长度为 \(n\) 的 \(a\) 序列,请问是否存在子序列积不存在平方根 思路:子序列的话,一个元素也 ...

  4. Codeforces Round #710 (Div. 3)个人简单题解

    补题链接:Here Proble-A. Strange Table 根据 x 确定坐标确定的行数和列数. int main() { ios_base::sync_with_stdio(false), ...

  5. ios ipa包上传需要什么工具

    ​ 目录 ios ipa包上传需要什么工具 前言 一.IPA包的原理 二.IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包 ...

  6. C#使用ParseExact方法将字符串转化为日期格式

    private void btn_Convert_Click(object sender, EventArgs e) { #region 针对Windows 7系统 string s = string ...

  7. Spring AOP原来是这样实现的

    Spring AOP 技术实现原理 在Spring框架中,AOP(面向切面编程)是通过代理模式和反射机制来实现的.本文将详细介绍Spring AOP的技术实现原理,包括JDK动态代理和CGLIB代理的 ...

  8. .net core 3.0 获取 IServiceProvider 实例

    .net core 3.0后,获取IServiceProvider需要绕点弯路 首先,新建一个类: public class MyServiceProviderFactory : IServicePr ...

  9. [转帖]TIDB - TIDB集群的扩容和缩容及TIUP指令说明

    一.TIUP工具简介 前面介绍了使用TIUP搭建TIDB集群,本篇文章详细介绍下使用TIUP对集群进行扩容和缩容. 在面对双十一这种流量突峰的场景,我们平常的TIDB集群有可能承受不住,因此需要提前进 ...

  10. [转帖]xsos:一个在 Linux 上阅读 SOSReport 的工具

    https://www.sohu.com/a/315931829_100034897 xsos 是一个帮助用户轻松读取 Linux 系统上的 sosreport 的工具.另一方面,我们可以说它是 so ...