基础学完了,这几个python高阶函数一起来看看吧!
文 |酷头
来源:印象python 「ID: python_logic」
Lambda 函数
Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。
Python 函数通常使用如下样式来定义,
def function_name():
pass
普通函数求圆面积
# 求圆面积
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(10, 100) for x in range(10)]
print(list)
'''
[83, 95, 16, 43, 66, 24, 11, 92, 38, 85]
'''
根据列表条件生成指定的列表
# 每月拿出月薪的30%存定期
salary = [8000, 8100, 8200, 8500, 7800, 7988, 8888]
save_sal = [int(x*0.3) for x in salary]
print('每月存款数目:', save_sal)
'''
每月存款数目: [2400, 2430, 2460, 2550, 2340, 2396, 2666]
'''
通过列表筛选生成新的列表
# 找出成绩大于等于80的学生
score = [80, 81, 72, 75, 98, 79, 88]
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, [8, 9, 7, 5, 7, 6, 2, 4, 3]))
print(odd_list)
'''
[9, 7, 5, 7, 3]
'''
方法2:求出当前列表内的所有偶数
# 取出列表内所有偶数
list_num = [8, 9, 7, 5, 7, 6, 2, 4, 3]
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, [8, 9, 7, 5, 7, 6, 2, 4, 3]))
print(new_list)
'''
[64, 81, 49, 25, 49, 36, 4, 16, 9]
'''
或者使用lambda表达式
# 求平方
new_list1 = list(map(lambda x:x*x, [8, 9, 7, 5, 7, 6, 2, 4, 3]))
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 = [8, 9, 7, 5, 7, 6, 2, 4, 3]
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(1, 101))
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(0, 100, 20)))
'''
[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 = [656, 602, 610, 618, 663, 695, 622, 645, 677, 640] # 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 = [18, 19, 20, 21]
print(list(zip(name_list, age_list)))
'''
[('Amo', 18), ('Paul', 19), ('Jason', 20), ('Seven', 21)]
'''
列表合并生成字典
# 生成字典
name_list = ["Amo", "Paul", "Jason", "Seven"]
age_list = [18, 19, 20, 21]
print(dict(zip(name_list, age_list)))
'''
{'Amo': 18, 'Paul': 19, 'Jason': 20, 'Seven': 21}
'''
矩阵转换
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
print(list(zip(x, y, z)))
'''
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
'''
本文详细介绍了几种事半功倍的python高级函数,
先收藏起来。
有兴趣的读者可以尝试自己动手练习一下。