首页 > 其他分享 >1.8 - 高阶函数与递归函数

1.8 - 高阶函数与递归函数

时间:2024-01-15 18:56:00浏览次数:23  
标签:function 函数 形参 递归函数 1.8 高阶 迭代 iterable

1.8.1 高阶函数

  高阶函数:其 形参或返回值 为函数。

# filter(function, iterable) 
# 将可迭代对象中的元素依次作为实参传递给指定的形参函数function调用,返回新的可迭代对象
tup = (1, 2, 0, False, True, -1)
obj = filter(lambda x:x-1 ,  tup) 
print(list(obj))  # [2, 0, False, -1] 


# map(function,  iterable) 
# 将可迭代对象中的元素依次作为实参传递给指定的形参函数function调用,返回新的可迭代对象
lst = [1, 2, 3]
obj2 = map(lambda x:x**2, lst)
print(list(obj2))


# reduce(function, iterable [, initial]) 
# 将可迭代对象中的元素 从左向右 依次 执行function函数,返回最后一次运算的值
from functools import reduce
lst = [1, 2, 3] 
obj3 = reduce(lambda x,y:x+y , lst)
print(obj3)

 当高阶函数的参数为函数function的时候,高阶函数传入的iterable的个数必须与形参function可以接收的参数个数相等。【在形参函数function执行的过程,会对每个iterable参数取zip作为实参,如果iterable的长度不一致,则以 最短的 一个iterable为准。】

# 高阶函数的形参函数接收多个参数
# 当高阶函数接收了多个iterable参数,在形参函数function执行的过程,会对每个iterable的元素 取 zip,依次传入function执行。

lst1 = [1, 2, 3]
lst2 = [2, 2, 2]
obj4 = map(pow, lst1, lst2)
# 实质执行过程为:[ pow(1,2) , pow(2,2) , pow(3,2) ]
print(list(obj4))  # [1, 4, 9] 

 

1.8.2 递归函数

  函数的返回值为自身。(递归函数一定要设置递归出口,即:返回值的触发条件)

  汉诺塔问题,斐波那契数列,动态规划算法等。

 

标签:function,函数,形参,递归函数,1.8,高阶,迭代,iterable
From: https://www.cnblogs.com/zhangzhenw/p/17965736

相关文章

  • linux 部署 jdk1.8
    将文件(jdk-8u391-linux-x64.tar.gz)上传到服务器的文件中。我是放到了/usr/local/jdk文件夹下面。然后输入指令压文件tar-zvxfjdk-8u391-linux-x64.tar.gz找到 /etc/profile文件,在最后一行添加exportJAVA_HOME=/usr/local/jdk/jdk1.8.0_391exportCLASSPATH=$:......
  • 上周热点回顾(1.8-1.14)
    热点随笔:· 为什么Java中“1000==1000”为false,而”100==100“为true? (YSOcean)· 微软用它取代了`Nginx`吞吐量提升了百分之八十! (tokengo)· 园子开店记-周边第一款:收到鼠标垫样品(新增另外3款照片) (博客园团队)· 别让“防御性编程”毁了我们的职业 (MeteorSeed)· 屎......
  • 11.8
    《代码大全2》是一本非常经典的软件开发书籍。在书中,强调了比较优秀的代码结构和命名规范的重要性。书中注释的部分帮助我理解怎么去编写有意义的注释,合适的注释可以提供代码理解上的便利,但是过多或者无关的注释会干扰代码的可读性。还有书中关于代码复用和模块化的内容帮助学习......
  • 本周(2024.1.8-2024.1.14)C语言学习小结
    既然之前说了要尝试坚持写博客,那就试试吧。本周花在C语言上的时间不多,简要回顾一下。动态数组学习并实践了基本的动态数组知识,即calloc、malloc、relloc、free。以下是基本综合所学内容写的代码,实现动态数据添加。#include<stdio.h>#include<stdlib.h>intmain(){......
  • C++U3-第09课-递归函数的应用
    学习目标 斐波那契数列例题  我们需要求出斐波那契第n项的值是多少【思路分析】我们用递归的方式去求解,当第一项和第二项返回1,否则返回前两项的和当前为第一项和第二项返回1当前不为第一项和第二项返回前两项的和定义n并把n输入,带入到递归求解【参考代......
  • 1.8日考试补题
    没有打,但感觉\(A,B,C\)都很简单。可能是黑色题面自动降智?\(A\)没想到这道题还有两个人没做出来做法用一个小根堆维护静态前缀第\(k\)大的值就行了。具体地如果当前堆中元素小于\(k\)个,那么就直接放入。如果当前堆中元素大于\(k\)个,那么就判断一下如果堆顶元素是否......
  • Java递归函数计算递归次数出错
    背景:构造组织架构树时,使用了递归填充子节点,为防止环状的错误数据导致递归无法结束,记录递归的次数,超过一定数量后终止递归问题:用户记录递归次数的变量在节点跳转的时候被重新赋值,无法正确记录 publicDepartgenDepartTreeFromRoot()throwsException{Departroot=De......
  • JDK1.8 如何升级到JDK17?详细图文讲解亲测有效
    前言电脑上之前已经安装了jdk1.8的版本,由于现在很多新的jar包需要jdk11以上版本。那么如何升级到jdk17的版本一、检查当前jdk版本java-version如果你本地已经有1.8版本了找到环境变量设置地方JAVA_HOME二、JDK17下载官方下载地址(Oracle中国的官方网站)https://www.or......
  • 【C语言高阶篇】结构体 —— 什么是内存对齐?
    (文章目录)前言  <fontcolor=green>......
  • 南外集训 2024.1.8 T3
    题意给定一个序列\(a\),将之划分为两个子序列,使得两个序列前缀最大值的和之和最小。\(1\len\le5\times10^5,1\lea_i\le10^9\)做法首先DP很容易做到平方:考虑前\(i\)个数,其中一个子序列当前的最大值当然是前\(i\)个数的最大值,记另一个序列的最大值是\(j\),此时的最......