python——返回函数、闭包函数、偏函数

2023-11-17


在这里插入图片描述

1.返回函数

函数的返回值也可以是函数

def food(name): #外函数
    
	def prepare(): #内函数
		print(f"[{name}]制作步骤:备菜...") #内部函数可以使用外部函数的变量
    def cook():
		print(f"[{name}]制作步骤:烹饪...")
	def serve():
		prepare()
		cook()
		print(f"[{name}]制作步骤:上菜!")
	return serve
m = food("番茄炒蛋")
f = food("小鸡炖蘑菇")
f()
m()

image-20220418002912150

def food(name): #外函数

    def cook():
         print(f"[{name}]制作步骤:烹饪...")
    def prepare():
        print(f"[{name}]制作步骤:备菜...")
    def serve():
		    prepare()
		    cook()
		    print(f"[{name}]制作步骤:上菜!")
    return (prepare,cook,serve)

m=food("番茄炒蛋")
f=food("小鸡炖蘑菇")
m[2]()
f[2]()

image-20220418003349339

2.闭包函数

image-20220417175204143

def func():
    a=5
    def innner():  #闭包函数
        print(a)	#通过使用外部函数的变量,延长了变量的使用时间
   	return inner
#算是一种语法糖
func=outer() 		#外部函数调用后,返回内部函数的地址
#执行闭包函数			
func()				#通过内部函数的地址,完成内部函数的调用

适用场景

def test(a,b):
    def test_in(c):
        print(a*b+c)
    return test_in
num=test(1,1)
#执行内部函数
num(2)
num(3)
num_02=test(2,2)
num_02(2)
num_02(3)

image-20220417203306780

3.偏函数

当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。

a=int("1100",base=10)  #强制类型转换函数,按照10进制打印
print(a,type(a))
a=int("0b1111",base=2) #强制类型转换函数,按照2进制打印
print(a,type(a))

1100 <class ‘int’>
15 <class ‘int’>

#设置base默认值为2
def int2(x,base=2):
    return int(x,base=base)
x=int2("1100")
print(x)
x=int2("1100",base=10)
print(X) 	#输出结果:1100
import functools

int2=functools.partial(int,base=2)  #定义新的函数,等同于:将参数base默认为2的int函数
print(type(int2))
x=int2("1100")
print(x)
#int2仅仅是设定了默认值,也可以将默认值修改为其他值
x=int2("1100",base=10)
print(x)

输出结果:
<class ‘functools.partial’>
12
1100

#可以使用functools.partial创建一个偏函数,第一个参数是函数名,第二个是设定默认值的参数名字
#   比如求除k取余数的函数
import functools

def getyunum(x,y):
	return x%y
getyunum1=functools.partial(getyunum,y=2)
num1=getyunum1(8)
num2=getyunum2(9)
print(num1,num2)

image-20220417215655333

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python——返回函数、闭包函数、偏函数 的相关文章

随机推荐

  • Ubuntu下非常给力的下载工具

    Windows下的下载工具 迅雷 之所以下载速度快 乃是它能搜索资源 为己所用 而不是仅仅从原始地址这单一资源处下载 Ubuntu下也有类似的工具 那就是aira2 aira2是一个命令行下载工具 可以配合其他图形界面的下载软件使用 我用的
  • HyperLogLog数据结构

    基数计数 cardinality counting 通常用来统计一个集合中不重复的元素个数 例如统计某个网站的UV 或者用户搜索网站的关键词数量 数据分析 网络监控及数据库优化等领域都会涉及到基数计数的需求 要实现基数计数 最简单的做法是记
  • python读取csmar_如何优雅的把CSMAR(国泰安)数据导入R

    前言CSMAR 国泰安 数据库是经济金融相关的科研工作者用到的最多的数据库之一 它提供了丰富全面的上市公司财务及金融数据 以及一些行业宏观层面的数据 但是 它并没有像WRDS 沃顿研究数据服务 等数据库提供丰富接口 如SAS R等 供下载
  • 论文阅读笔记之——《Multi-level Wavelet-CNN for Image Restoration》及基于pytorch的复现

    本博文是MWCNN的阅读笔记 论文的链接 https arxiv org pdf 1805 07071 pdf 代码 https github com lpj0 MWCNN 仅仅是matlab代码 通过参考代码 对该网络在pytorch框架
  • C语言库函数——快排函数qsort()

    目录 一 函数原型 二 函数介绍 三 函数使用 常见写法 比较函数 四 函数实例 1 int型数组 2 double型数组 3 char型数组 4 字符串 5 结构体 一级结构 二级结构 一 函数原型 void qsort void bas
  • CAN协议详解-01

    CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519以及ISO11898 是国际上应用最广泛的现场总线之一 差
  • 《机器学习实战》第14章学习笔记(数据约简工具---SVD)

    一 SVD基本原理 提取这些信息的方法称为奇异值分解 Singular Value Decomposition SVD 在很多情况下 数据中的一小段携带了数据集中的大部分信息 其他信息则要么是噪声 要么就是毫不相关的信息 在线性代数中还有很
  • unity如何解决每次写完敲代码,调试时需要卡个进度条

    解决办法如下 勾选上之后程序就可以立刻运行起来了 再也不用一直卡进度条了 不过也有弊端的 会影响静态字段初始化有问题还有Dotween的一些效果会发生变化 谨慎避免入坑
  • armbian安装图形桌面_Linux的图形用户界面-你会选择哪个?

    时至今日 Linux在服务器端的地位是毋庸置疑的 其常见的命令行界面是相当稳定的 图形界面嘛 存在众多版本 兼容性有待进一步提升 常见的图形界面有 以ubuntu系统为例 Unity 这是Ubuntu自带的图形界面 相当炫 但吃内存比较大
  • 毕业设计-基于机器学习的中文文本分类算法

    目录 前言 课题背景和意义 实现技术思路 一 文本分类综述 二 文本分类相关技术简 1 文本处理过程 2 分类算法 3 分类算法评价方法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学
  • Snowy Smile【扫描线】【2019 杭电多校6】

    HDU 6638 题目链接 比赛的时候只在拼命的想怎么去优化O N 3 的那个之前所认为的标准解法 没想到 这就是一道O N 2 logN 的扫描线 我们可以固定上下两个区间 然后在固定的区域中 就是一维的空间了 我们直接在这一维里去查询即
  • 数字芯片流程

    芯片设计分为前端设计和后端设计 前端设计 逻辑设计 和后端设计 物理设计 并没有同意严格的界限 这个过程中涉及到了与工艺有关的设计就是后端设计 一 需求分析 产品需要解决的问题 预测3 5年的趋向和走势 确保前瞻性 确保芯片是有卖点的 客户
  • kong dashboard UI 的使用 (使用kong 对服务反向代理,以及解决跨域问题)

    7 2Choose Security and click on ADD PLUGIN in cors then don t input content and click on ADD PLUGIN button directly 第一步登
  • 【Zotero6】插件Zotcard自定义笔记模板流程分享

    Zotero 个人感觉比Endnote更好用的文献管理器 集翻译 文献整理 笔记 查询期刊影响因子 期刊分区等集于一身的文献管理器 据说是一款开源软件官网就可以免费下载 安装附加的浏览器插件使用更方便 今天更新的是Zotero中的笔记插件
  • 计算机操作系统pcb是什么意思,简述PCB的含义以及作用

    描述 为了使参与并发执行的每个程序 包含数据都能独立地运行 在操作系统中必须为之配置一个专门的数据结构 称为进程控制块 PCB Process Control Block 进程与PCB是一一对应的 用户进程不能修改 进程控制块PCB的作用
  • muduo 架构解析

    muduo是一个基于Reactor模式的C 网络库 它采用非阻塞I O模型 基于事件驱动和回调 我们不仅可以通过muduo来学习linux服务端多线程编程 还可以通过它来学习C 11 Reactor是网络编程的一般范式 我们这里从react
  • RockyLinux9.1环境初始化

    下载镜像 https rockylinux org download 基础设置 硬件配置 系统配置 系统初始化 配置网络 配置网络 etc NetworkManager system connections ens160 nmconnect
  • 要言不烦先行指标与滞后指标的12个要点

    先行指标 leading indicator 是在结果发生之前对结果具有预测作用的度量数据 又称为超前指标 预测性指标 先导指标 领先指标 行为指标 过程指标等 滞后指标 lagging indicator 是对最终结果的度量数据 反映的是
  • jar包读取资源文件报错:找不到资源文件(No such file or directory)

    1 遇到问题 1 Maven项目开发阶段正常运行 Java程序可以读取配置文件 public class Main public static void main String args throws Exception Main read
  • python——返回函数、闭包函数、偏函数

    文章目录 1 返回函数 2 闭包函数 3 偏函数 1 返回函数 函数的返回值也可以是函数 def food name 外函数 def prepare 内函数 print f name 制作步骤 备菜 内部函数可以使用外部函数的变量 def