首页 > 编程知识 正文

python高阶用法,python高级进阶

时间:2023-12-27 22:28:04 阅读:327249 作者:BIGB

本文目录一览:

python中zip函数有哪些高级用法

zip()  功能是从参数的多个迭代器中选取元素组合成一个新的迭代器。顾名思义,它就是一个将对象进行打包和解包的函数。

它可以传入的参数包括;元组、列表、字典等迭代器

它返回一个zip对象,其内部元素为元组,一组一组的,可以转化为列表或元组,这里要强调一下,Python2和Python3中返回的zip对象有所不同。

Python3中zip()函数再不再返回list对象,但是可以通过list强行转换。(类似的函数变化还有dictionary关联的keys()、values()、items(),map(),filter())。

打包zip(iterables)

上面的代码使用的环境是Python3.6,其中list (z)操作就是强制转换。注意一个问题,a和b这两个列表是不同长短的,这时候zip函数就会匹配完最短的那个便结束。

当zip函数的参数只有一个时,它将从iterable中依次取一个元素,组成一个元组。

解包zip(*iterables)

解包,zip 相反,可理解为解压,返回多维矩阵形式,有几个组元素就返回几维的。

比如,下面我是用三个列表组合起来的迭代式,那么解压后就返回三维的矩阵

zip高级用法

讲完了基本的再来说一下该函数的高级用法。高级用法离不开一个词:Pythonic,就是将代码写的更优雅美观,看起来有逼格!

1. 列表推导

例如:

a = [1,2,3,4]

b = [5,6,7,8]

我们要同时遍历a、b,且要对它们进行操作,那就要放在同一个for循环内,zip函数正好合适

注意:如果是Python2环境中,要使用izip才能提高效率。

当然,如果你需要对下标进行操作,那么还需要加上enumerate函数

2. 使用zip创建键值对,zip方法返回的是一个元组,用它来创建键值对,简单明了。

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函数高级

一、函数的定义

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

特性:

减少重复代码

使程序变得可扩展

使程序变得易维护

二、函数的参数

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、把函数作为实参;2、把函数作为返回值。

python高阶函数有哪些?

map函数

map()是python内置的高阶函数,它接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并且把结果作为新的列表返回。

filter函数

filter()同样也是接收一个函数和一个序列,和map()不同的是,filter函数把传入的函数依次作用于每个元素,然后返回返回值是True的元素。

reduce函数

reduce()把一个函数作用到一个序列上,这个函数必须接收两个参数,reduce把结果和序列的下一个元素做累积计算。

lambda函数

lambda()有时候传参数时不需要显示自定义的函数,直接传入匿名函数更方便;冒号前面的X,y表示函数参数,匿名函数不需要担心函数名的冲突,匿名函数也是一个函数对象,可以吧匿名函数赋值给一个变量,再利用变量来调用函数,匿名函数也可以作为返回值返回。

sorted函数

sorted()作为python内置高阶函数之一,其功能是对序列(列表、元组、字典、集合、字符串)进行排序。

Python 函数进阶-高阶函数

高阶函数就是能够把函数当成参数传递的函数就是高阶函数,换句话说如果一个函数的参数是函数,那么这个函数就是一个高阶函数。

高阶函数可以是你使用 def 关键字自定义的函数,也有Python系统自带的内置高阶函数。

我们下面的例子中,函数 senior 的参数中有一个是函数,那么senior就是一个高阶函数;函数 tenfold 的参数不是函数,所以tenfold就只是一个普通的函数。

function:函数,可以是 自定义函数 或者是 内置函数;

iterable:可迭代对象,可迭代性数据。(容器类型数据和类容器类型数据、range对象、迭代器)

把可迭代对象中的数据一个一个拿出来,然后放在到指定的函数中做处理,将处理之后的结果依次放入迭代器中,最后返回这个迭代器。

将列表中的元素转成整型类型,然后返回出来。

列表中的每一个数依次乘 2的下标索引+1 次方。使用自定义的函数,配合实现功能。

参数的意义和map函数一样

filter用于过滤数据,将可迭代对象中的数据一个一个的放入函数中进行处理,如果函数返回值为真,将数据保留;反之不保留,最好返回迭代器。

保留容器中的偶数

参数含义与map、filter一致。

计算数据,将可迭代对象的中的前两个值放在函数中做出运算,得出结果在和第三个值放在函数中运算得出结果,以此类推,直到所有的结果运算完毕,返回最终的结果。

根据功能我们就应该直到,reduce中的函数需要可以接收两个参数才可以。

将列表中的数据元素组合成为一个数,

iterable:可迭代对象;

key:指定函数,默认为空;

reverse:排序的方法,默认为False,意为升序;

如果没有指定函数,就单纯的将数据安札ASCII进行排序;如果指定了函数,就将数据放入函数中进行运算,根据数据的结果进行排序,返回新的数据,不会改变原有的数据。

注意,如果指定了函数,排序之后是根据数据的结果对原数据进行排序,而不是排序计算之后的就结果数据。

将列表中的数据进行排序。

还有一点就是 sorted 函数可以将数据放入函数中进行处理,然后根据结果进行排序。

既然有了列表的内置函数sort,为什么我们还要使用sorted函数呢?

高阶函数就是将函数作为参数的函数。

文章来自

python 高阶函数有哪些

1、高阶函数

变量可以指向函数,函数的参数可以接收变量,那么函数可以接收另一个函数作为参数,这种函数称为高阶函数。

(1)把函数作为实参

(2)把函数作为返回值

2、系统的内置高阶函数

(1)map函数:接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并且把结果作为新的列表返回

(2)reduce函数:把一个函数作用到一个序列上,这个函数必须接收两个参数,reduce把结果和序列的下一个元素做累积计算

(3)filter函数:也接收一个函数和一个序列,和map函数不同的是,filter函数把传入的函数依次作用于每个元素,然后返回返回值是True的元素

(4)sorted函数:排序函数

把用户名按照首字母不区分大小写排序

(5)sorted()函数按照关键字排序

关键字:商品个数

(6)sorted()函数按照关键字排序,用键值来查找

(7)lambda匿名函数:有时候传参数时不需要显示自定义的函数,直接传入匿名函数更方便;冒号前面的x,y表示函数参数,匿名函数不需要担心函数名的冲突,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,再利用变量来调用函数,匿名函数也可以作为返回值返回

3、高阶函数的应用:

(1)sorted函数:

(2)sorted函数默认是从小到大排序

4、装饰器

装饰器就是用来装饰函数的:想要增加原有函数的功能,但是不希望修改原有函数的定义,在代码运行期间动态增加功能的方式

(1)此装饰器的功能:计算函数的运行时间

import functools

@functools.wraps(f)   ##保留原有函数的属性

运行结果:

(2)此装饰器的功能:用户登录认证

运行结果:

(3)此装饰器的功能:认证用户的同时,显示用户的转账金额

import inspect

inspect.getcallargs()将传的参数封装为一个字典,字典的key值是形式参数,value值是实参

(4)此装饰器的功能:确保收到的每个参数都是整数,是整数就求和,否则抛出错误

(5)此装饰器的功能:给装饰器传参数,是整数和浮点数就求和

python学习网,大量的免费python视频教程,欢迎在线学习!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。