前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习笔记3.3-高级函数技巧

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

作者头像
锦小年
发布2018-01-02 14:09:48
5220
发布2018-01-02 14:09:48
举报
文章被收录于专栏:锦小年的博客锦小年的博客

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

1 递归函数

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

代码语言:javascript
复制
def get_n(n):
    if n==1:
        return 1
    return n*get_n(n-1)

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

2 高阶函数

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

代码语言:javascript
复制
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函数的功能就是把这个函数分别应用到可迭代对象上并返回一个新的可迭代对象。

代码语言:javascript
复制
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则删除该元素。

代码语言:javascript
复制
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 函数名作为返回值

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

代码语言:javascript
复制
def get_add(x,y):
    def get_mal():
        return x*5
    return get_mal()+y

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 递归函数
  • 2 高阶函数
  • 3 函数名作为返回值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档