用Python编高阶函数,python编程基础

python函数高级

一、函数的定义

网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了零陵免费建站欢迎大家使用!

函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用函数名即可

特性:

减少重复代码

使程序变得可扩展

使程序变得易维护

二、函数的参数

2.1、形参和实参数

形参,调用时才会存在的值

实惨,实际存在的值

2.2、默认参数

定义:当不输入参数值会有一个默认的值,默认参数要放到最后

2.3、 关键参数

定义: 正常情况下,给函数传参数要安装顺序,不想按顺序可以用关键参数,只需要指定参数名即可,(指定了参数名的就叫关键参数),但是要求是关键参数必须放在位置参数(以位置顺序确定对应的参数)之后

2.4、非固定参数

定义: 如你的函数在传入参数时不确定需要传入多少个参数,就可以使用非固定参数

# 通过元组形式传递

# 通过列表形式传递

# 字典形式(通过k,value的方式传递)

# 通过变量的方式传递

三、函数的返回值

作用:

返回函数执行结果,如果没有设置,默认返回None

终止函数运行,函数遇到return终止函数

四、变量的作用域

全局变量和局部变量

在函数中定义的变量叫局部变量,在程序中一开始定义的变量叫全局变量

全局变量作用域整个程序,局部变量作用域是定义该变量的函数

当全局变量与局部变量同名是,在定义局部变量的函数内,局部变量起作用,其他地方全局变量起作用

同级的局部变量不能互相调用

想要函数里边的变量设置成全局变量,可用global进行设置

五、特殊函数

5.1、嵌套函数

定义: 嵌套函数顾名思义就是在函数里边再嵌套一层函数

提示 在嵌套函数里边调用变量是从里往外依次调用,意思就是如果需要调用的变量在当前层没有就会去外层去调用,依次内推

匿名函数

基于Lambda定义的函数格式为: lambda 参数:函数体

参数,支持任意参数。

匿名函数适用于简单的业务处理,可以快速并简单的创建函数。

# 与三元运算结合

5.3、高阶函数

定义:变量可以指向函数,函数的参数可以接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数 只需要满足一下任意一个条件,即是高阶函数

接收一个或多个函数作为输入

return返回另一个函数

5.4、递归函数

定义:一个函数可以调用其他函数,如果一个函数调用自己本身,这个函数就称为递归函数

在默认情况下Python最多能递归1000次,(这样设计师是为了防止被内存被撑死)可以通过sys.setrecursionlimit(1500)进行修改

递归实现过程是先一层一层的进,然后在一层一层的出来

必须有一个明确的条件结束,要不然就是一个死循环了

每次进入更深层次,问题规模都应该有所减少

递归执行效率不高,递归层次过多会导致站溢出

# 计算4的阶乘 4x3x2x1

# 打印数字从1-100

5.5、闭包现象

定义:内层函数调用外层函数的变量,并且内存函数被返回到外边去了

闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

python高阶函数有哪些

1、map

map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回。

举例,比如我们有一个函数f(x)=x*2,要把这个函数作用在一个list[1, 2, 3, 4, 5, 6, 7, 8,

9]上,就可以用map()实现。

def f(x):

... return x*2

...

r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

list(r)

[2, 4, 6, 8, 10, 12, 14, 16, 18]

所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x*2,还可以计算任意复杂的函数,比如把这个list所有的数字转为字符串:

list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))

["1", "2", "3", "4", "5", "6", "7", "8", "9"]

2、reduce

reduce是把一个函数作用在一个序列[x1, x2,

x3……]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累计计算。简单来说,就是先计算x1和x2的结果,再拿结果与x3计算,依次类推。比如说一个序列求和,就可以用reduce实现。

from functools import reduce

def add(x, y):

... return x + y

...

reduce(add, [1, 3, 5, 7, 9])

25

也就是说,假设python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码。

3、filter

用于过滤序列,和map函数类似,filter也接收一个函数和一个序列,不同于map的是,filter把传入的函数依次作用于每一个元素,然后根据返回值是True还是False决定保留还是丢弃该元素,例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):

return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

# 结果: [1, 5, 9, 15]

把一个序列中的空字符串删掉,可以这么写:

def not_empty(s):

return s and s.strip()

list(filter(not_empty, ["A", "", "B", None, "C", " "]))

# 结果: ["A", "B", "C"]

可见用filter()这个高阶函数,关键在于正确实现一个筛选函数。

4、sorted

无论冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来,Python内置的sorted()函数就可以对list进行排序:

sorted([36, 5, -12, 9, -21])

[-21, -12, 5, 9, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

sorted([36, 5, -12, 9, -21], key=abs)

[5, 9, -12, -21, 36]

一文读懂Python 高阶函数

将函数作为参数传入,这样的函数称为高阶函数。 函数式编程就是指这种高度抽象的编程范式。

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。如下所示:

map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。

定义一个匿名函数并调用,定义格式如--lambda arg1,arg2…:表达式

reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

闭包的定义?闭包本质上就是一个函数

如何创建闭包?

如何使用闭包?典型的使用场景是装饰器的使用。

global与nonlocal的区别:

简单的使用如下:

偏函数主要辅助原函数,作用其实和原函数差不多,不同的是,我们要多次调用原函数的时候,有些参数,我们需要多次手动的去提供值。

而偏函数便可简化这些操作,减少函数调用,主要是将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。

我们再来看一下偏函数的定义:

类func = functools.partial(func, *args, **keywords)

我们可以看到,partial 一定接受三个参数,从之前的例子,我们也能大概知道这三个参数的作用。简单介绍下:

总结

本文是对Python 高阶函数相关知识的分享,主题内容总结如下:


本文标题:用Python编高阶函数,python编程基础
转载注明:http://cdiso.cn/article/dsegece.html

其他资讯