Python--高階関数。filter()を使用してNoneまたは空の文字列を削除します

1.高階関数

高阶函数就是一个函数可以用来接收另一个函数作为参数,
这样的函数叫做高阶函数。

ここに画像の説明を挿入

def add_num(a, b):
    return abs(a) + abs(b)


result = add_num(-1, 2)
print(result)

ここに画像の説明を挿入
ここに画像の説明を挿入

def add_num(a, b, f):
    return f(a) + f(b)


result = add_num(-1, 2, abs)
print(result)

ここに画像の説明を挿入
ここに画像の説明を挿入


1.1組み込みの高階関数:map()

map函数:根据提供的函数对指定的序列做映射。
将传入的函数变量func作用到iterables变量的每个元素中,
并将结果组成新的迭代器返回。

ここに画像の説明を挿入

参数说明:
function: 一个函数名,可以是Python内置的,也可以是自定义的。
iterables: 一个可以迭代的对象,例如元组、列表、字符串。
返回值:map的返回结果是一个object对象。
# 1. 准备列表数据
list_01 = [1, 2, 3, 4, 5, 6, 7, 8, 9]


# 2. 准备2次方计算的函数
def f(x):
    return x * x


# 3. 调用map
result = map(f, list_01)
# 4. 验收结果
print(list(result))

演算結果:
ここに画像の説明を挿入


1.2組み込みの高階関数reduce()

ここに画像の説明を挿入

reduce()函数:实现对func计算的结果继续和序列的下一个元素做累积计算。

ここに画像の説明を挿入

用传给reduce中的函数 func()(必须是一个二元操作函数)
先对集合中的第1,2个数据进行操作,
得到的结果再与第三个数据用func()函数运算。

参数说明:
function:函数,有2个参数。
iterable: 一个可以迭代的对象,例如元组、列表、字符串。
initializer:可选,初始参数。

ここに画像の説明を挿入

サンプルコード:

# 导入模块
from functools import reduce


# 定义函数功能
def myAdd(x, y):
    return x + y


# 调用reduce,作用:功能函数计算的结果和序列的下一个数据做累计计算
add = reduce(myAdd, [1, 2, 3, 4])
print(add)

演算結果:
ここに画像の説明を挿入
上記の例は無名関数として表現できます。

# 导入模块
from functools import reduce

add = reduce(lambda x, y: x + y, [1, 2, 3, 4])
print(add)

演算結果:
ここに画像の説明を挿入


1.3組み込みの高階関数:filter()

fliter()函数:对指定的序列执行过滤操作。
其接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,
返回True或 False,filter()根据判断结果自动过滤掉不符合条件的元素。

ここに画像の説明を挿入

参数说明:
function: 属于判断函数,该函数为函数的名称或者None。
该参数如果使function,他只能接收一个参数,而且返回值是布尔值。
iterable: 一个可以迭代的对象,例如元组、列表、字符串。
返回值:filter返回结果是一个object对象。

例:
ここに画像の説明を挿入

list1 = [1, 4, 6, 7, 9, 12, 17]


# 1. 定义功能函数:过滤序列中的偶数
def is_odd(x):
    return x % 2 == 1


# 2. 调用filter,利用filter()过滤掉偶数
print(list(filter(is_odd, list1)))

演算結果:
ここに画像の説明を挿入


1.4 filter()を使用して、Noneまたは空の文字列を削除します

def is_not_empty(s):
    return s and len(s.strip()) > 0


print(list(filter(is_not_empty, ['test', None, None, '', ' ', '  ', 'ddd', ' end'])))

演算結果:
ここに画像の説明を挿入



おすすめ

転載: blog.csdn.net/I_r_o_n_M_a_n/article/details/115335077