查看原文
其他

基础学完了,这几个python高阶函数一起来看看吧!

酷头酷头 印象Python 2022-08-01

文 |酷头

来源:印象python 「ID: python_logic」


嗨!朋友,我是酷头
欢迎来到学习python的宝藏基地~~~
今天给大家介绍python的几种高级函数,一起来看看吧!





Lambda 函数


Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。

Python 函数通常使用如下样式来定义,


def function_name():
  pass

但对于 lambda 函数,我们根本没为它命名。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。

lambda 函数可以使用任意数量的参数,但表达式只能有一个。
下面我们来看一下普通函数和lambda函数的区别


普通函数求圆面积


# 求圆面积
import math

def circlearea(r):
    result = math.pi*r*r
    return result

r = 10
print('圆面积为:', circlearea(r))
'''
圆面积为:314.1592653589793
'''


lambda函数求圆面积


# 求圆面积
import math
r = 10
result = lambda r:math.pi*r*r
print('圆面积为:', result(r))
'''
圆面积为:314.1592653589793
'''


再来看看lambda函数在列表推导式中的那些使用


指定范围内的数值列表


import random
# 生成10-100之间的随机列表
list  = [random.randint(10100for x in range(10)]
print(list)
'''
[83, 95, 16, 43, 66, 24, 11, 92, 38, 85]
'''


根据列表条件生成指定的列表


# 每月拿出月薪的30%存定期
salary = [8000810082008500780079888888]
save_sal = [int(x*0.3for x in salary]
print('每月存款数目:', save_sal)
'''
每月存款数目: [2400, 2430, 2460, 2550, 2340, 2396, 2666]
'''



通过列表筛选生成新的列表


# 找出成绩大于等于80的学生
score = [80817275987988]
result = [x for x in score if x >= 80]
print('成绩大于等于80的学生:', result)
'''
成绩大于等于80的学生: [80, 81, 98, 88]
'''


看它多么简单!我们执行了一些简单的数学运算,而无需定义整个函数。这是 Python 的众多特征之一,这些特征使它成为一种干净、简单的编程语言。


lambda函数还可以跟一些内置函数一起使用,接下来一起看看吧!



filter()函数


filter() 函数用于通过指定条件过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,

然后返回 True 或 False,最后将返回 True 的元素放到新列表中。


语法如下:

filter(function, iterable)


方法1:求出当前列表内的所有奇数


# 取出列表内所有奇数
def if_odd(n):
    return n % 2 == 1

odd_list = list(filter(if_odd, [897576243]))
print(odd_list)
'''
[9, 7, 5, 7, 3]
'''


方法2:求出当前列表内的所有偶数


# 取出列表内所有偶数
list_num = [897576243]
list_even = list(filter(lambda x: x % 2 == 0, list_num))
print(list_even)
'''
[8, 6, 2, 4]
'''



map()函数


和filter()函数类似,map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。


map() 函数语法:


map(function, iterable, ...)


# 求平方
def square(x):
    return x*x

new_list = list(map(square, [897576243]))
print(new_list)
'''
[64, 81, 49, 25, 49, 36, 4, 16, 9]
'''


或者使用lambda表达式


# 求平方
new_list1 = list(map(lambda x:x*x, [897576243]))
print(new_list1)
'''
[64, 81, 49, 25, 49, 36, 4, 16, 9]
'''



reduce() 函数



在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,

它现在被放置在 functools 模块里,

如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

from functools import reduce


reduce()函数常用于对一个集合做一些累计操作,表示对iterable中的每个元素和上次调用函数后的结果进行运算。

来看例子


# 求列表之和

from functools import reduce
list = [897576243]
sum = reduce(lambda x, y: x+y, list)
print(sum) # 51 = 8+9+7+5+7+6+2+4+3


from functools import reduce
# 求0-100之和
def add(x, y):
    return x+y

sum = reduce(add, range(1101))
print(sum)
'''
5050
'''


Range()函数


range() 函数用于生成一个新的 range 类型,多用于 for 循环语句中,用于生成指定范围的整数。range() 函数的语法格式如下:

range(start,end,step)


range()函数接收的参数必须是整数,

不能是浮点数等其他数据类型,否则会提示类型错误。

在使用range()函数时,


如果只有一个参数,那么表示指定的是stop结束整数;


如果是两个参数,则表示指定的是start开始整数和end结束整数;


只有三个参数都存在时,最后一个参数才表示step步长。

for i in range(11):
    print(f'第{i}个数是:', i)

'''
第0个数是: 0
第1个数是: 1
第2个数是: 2
第3个数是: 3
第4个数是: 4
第5个数是: 5
第6个数是: 6
第7个数是: 7
第8个数是: 8
第9个数是: 9
第10个数是: 10
'''


将生成的序列转换成列表


print(list(range(5)))
'''
[0, 1, 2, 3, 4]
'''


print(list(range(5,16)))
'''
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
'''


print(list(range(010020)))
'''
[0, 20, 40, 60, 80]
'''



reversed ()函数



reversed() 函数用于反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器,reversed() 函数的语法格式如下:


reversed(seq)


反转的对象可以是序列,如列表、元组、字符串或 range 对象等。


#字符串反转
str1 = '人生短短几个秋啊'
rev_str = list(reversed(str1))
print(str1)
print(''.join(rev_str))
'''
人生短短几个秋啊
啊秋个几短短生人
'''


# 列表反转
list1 = list(range(5,11))
rev_list = list(reversed(list1))
print(list1)
print(rev_list)
'''
[5, 6, 7, 8, 9, 10]
[10, 9, 8, 7, 6, 5]
'''


tuple1 = tuple(range(1,6))
rev_tup = tuple(reversed(tuple1))
print(tuple1)
print(rev_tup)
'''
(1, 2, 3, 4, 5)
(5, 4, 3, 2, 1)
'''


sorted() 函数


sorted() 函数用于对可迭代对象进行 排序,返回一个重新排序的列表,当使用该函数进行排序后,原列表的元素顺序不变。语法格式如下:


sorted(iterable, key=None, reverse=False):


排序的对象可以是列表、字符串、字典等

grade_list = [656602610618663695622645677640]  # 10名600分以上的学生成绩列表
# 升序列表: [602, 610, 618, 622, 640, 645, 656, 663, 677, 695]
print(f"升序列表: {sorted(grade_list)}")  # 升序排序
# 降序列表: [695, 677, 663, 656, 645, 640, 622, 618, 610, 602]
print(f"降序列表: {sorted(grade_list, reverse=True)}")  # 降序排序



zip() 函数


zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的 zip 对象。语法格式如下:

zip(*iterables) --> zip object参数说明:


iterables:可迭代对象,如列表、字典、元组、字符串等,zip() 函数允许多个可迭代对象作为参数。


当 zip() 函数没有参数时,则返回空的迭代器。


当 zip() 函数只有一个参数时,则从参数中依次取一个元素组成一个元组,再将依次组成的元组组合成一个新的迭代器。


当 zip() 函数有两个参数时,分别从两个参数中依次各取出一个元素组成元组,再将依次组成的元组组合成一个新的迭代器。


列表合并生成列表


# 生成列表
name_list = ["Amo""Paul""Jason""Seven"]
age_list = [18192021]
print(list(zip(name_list, age_list)))
'''
[('Amo', 18), ('Paul', 19), ('Jason', 20), ('Seven', 21)]
'''


列表合并生成字典


# 生成字典
name_list = ["Amo""Paul""Jason""Seven"]
age_list = [18192021]
print(dict(zip(name_list, age_list)))
'''
{'Amo': 18, 'Paul': 19, 'Jason': 20, 'Seven': 21}
'''


矩阵转换


x = [123]
y = [456]
z = [789]

print(list(zip(x, y, z)))
'''
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
'''


本文详细介绍了几种事半功倍的python高级函数,

先收藏起来。

有兴趣的读者可以尝试自己动手练习一下。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存