python学习笔记3.3-高级函数技巧

在使用函数的时候,如果能合理的使用一些技巧,对于代码的阅读性以及程序的结构都是很有帮助的。常用的技巧有递归函数、高阶函数等。

1 递归函数

递归函数的定义就是在函数的内部调用自身,这样的函数就称为递归函数。其实递归是一种思想,将一个复杂问题分为很多步,上一步的输出结果会作为下一步的输入。例如:求解1*2*3*...*n

def get_n(n):
    if n==1:
        return 1
    return n*get_n(n-1)

运用这个思想就能够求等比数列的乘积了。 我们从函数定义也可以看出,递归函数是一层一层的函数不断的嵌套实现的,同时我们也知道在调用函数的时候会将正在运行的地址和数据存在栈中,如果递归的层数很多,就容易导致栈溢出,最终使得程序运行错误,所以要谨慎使用递归函数。

2 高阶函数

高阶函数这种称谓比较难理解,通俗的说就是让函数的参数能够接受别的函数,也就是说函数也是变量的一种表现形式,也就是说,函数名本质上是指向函数的变量。知道了这些我们就可以这样去定义一个函数了:

def get_mul(x,y):
    return x*y

def get_add(x,y,func):
    return x+y+func(x,y)

a = get_add(2,3,get_mul)
print(a)

python中内置了几个比较实用的高阶函数,这里不得不提。 - 2.1 map()

map()函数接收两个参数:一个函数,一个可迭代的对象(list,字符串等),map函数的功能就是把这个函数分别应用到可迭代对象上并返回一个新的可迭代对象。

def get_add(x,y=10):
    return x+y

a = map(get_add, [1,2,3,4,5])
print(a)  #a 是对象的地址

b = list(a)  # 将对象转换为list
print(b)
  • 2.2 filter()

filter函数用于过滤可迭代对象(list等),过滤的原则是根据传入的函数应用到传入的可迭代对象的元素上,根据返回值来决定该元素是否删除,如果返回值为True,则保留;同样,返回值为False则删除该元素。

def is_zero(x):
    if x == 0:
        return False
    else:
        return True

a = filter(is_zero, [1,2,0,4,0])
print(a)

b = list(a)
print(b)

3 函数名作为返回值

在函数嵌套的过程中,也就是在函数中还声明了函数,函数名可以作为内层函数的返回结果直接使用。

def get_add(x,y):
    def get_mal():
        return x*5
    return get_mal()+y

a = get_add(5,10)
print(a)

这种用法也充分说明了函数名是指向函数的变量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大前端_Web

C#中值类型和引用类型及类型的转换

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1256
来自专栏编程

Kotlin学习之常用高阶函数:filter

Kotlin学习之常用高阶函数:filter Kotlin高阶函数一般是数组、集合、序列等数据结构的扩展函数,接收一个操作函数对数据进行操作,在Kotlin函数...

19910
来自专栏北京马哥教育

最全 Python3 函数知识点大全

23311
来自专栏python学习指南

Scala学习笔记之二--基本数据类型

前言 本篇主要讲Scala的基本数据类型,更多教程请参考:Scala教程 基本数据类型 Scala一共提供了9中数据类型,Scala的基本数据类型与j...

1965
来自专栏Golang语言社区

Golang语言--一些基础用法

range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。其可以使用的对象包括string,array/slice,map,channel。其中stri...

3317
来自专栏行者常至

007.golang 切片slice

883
来自专栏GreenLeaves

C# params关键字

1、params关键字的作用 (1)、使用 params关键字可以指定一个方法参数,该方法参数的数目可变。 (2)、可以发送参数声明中所指定类型的逗号分隔的参数...

1796
来自专栏java工会

完整的java数组操作应用知识汇总

数组是一种非常有用和常用的数据类型,存在于每种程序语言之中,java中的数组是一种最简单的复合数据类型,刚学习java数组的小白们大多都会听到一句这样的话:ja...

802
来自专栏峰会SaaS大佬云集

C#学习笔记---基础入门

变量声明赋值:int money =1000;/int money;money=1000; 输出:console.writeLine(money);consol...

523
来自专栏大前端_Web

javascript中的for in 和 in运算符

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1082

扫码关注云+社区