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 条评论
登录 后参与评论

相关文章

来自专栏塔奇克马敲代码

第6章 函数

1717
来自专栏猿人谷

标准库类型

一.标准string类型     string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。 1.1 strin...

1778
来自专栏编程

python的函数(二):作用域

我们在写函数时,时常需要引用全局的变量,或对全局变量赋值。又或者偶尔遇到局部变量与全局变量同名。在处理这些问题时,python语言的游戏规则是怎样的?今天我们就...

1755
来自专栏Python小屋

详解Python中的生成器表达式(generator expression)

生成器表达式(generator expression)也叫生成器推导式或生成器解析式,用法与列表推导式非常相似,在形式上生成器推导式使用圆括号(parenth...

3396
来自专栏python3

python3--列表推导式,生成器表达式,内置函数

3,python不但使用迭代器协议,让for循环变得更加通用,大部分内置函数,也是使用迭代器协议访问对象的,例如sum函数是python的内置函数,该函数使用迭...

800
来自专栏日常分享

Java 将两个有序数组合成为一个有序数组

   (2)将 两个数组 对应索引下的元素进行比较,小的一方 放入最终数组中的当前索引下的位置,并使小的一方数组的索引+1;

751
来自专栏前端儿

JavaScript 的数据类型 相关知识点

JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type)

692
来自专栏coding for love

JS入门难点解析7-this

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

541
来自专栏企鹅号快讯

Python基础知识3:re正则表达式

正则表达式(或RE)是一种小型的、高度专业化的编程语言,内嵌在Python中,仅做字符的匹配。 1、字符类型: 普通字符和元字符; 1)普通字符:大多数的字符和...

1747
来自专栏互联网杂技

js中type of与instance的区别

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的: typeof type...

3175

扫码关注云+社区