python 内置函数的扩展

filter函数

filter() 是 Python 内置函数之一,其作用是根据给定的函数对可迭代对象中的元素进行筛选,并返回一个新的可迭代对象,其中包含原可迭代对象中满足筛选条件的元素。

filter() 函数的语法如下:

filter(function, iterable)

其中 function 是一个函数,用于定义筛选条件;iterable 则是一个可迭代对象,表示需要被筛选的数据集合。当 function 返回值为真时,相应的元素将会被保留在结果中。

下面是使用 filter() 函数对一个列表进行筛选的示例:

def is_even(n):
    return n % 2 == 0

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(is_even, numbers))
print(even_numbers)  # 输出 [2, 4, 6, 8, 10]

在上面的例子中,我们首先定义了一个 is_even() 函数,用于判断一个数是否为偶数。然后,我们通过 filter() 函数筛选出了列表 numbers 中的所有偶数,并将它们存储在一个新的列表 even_numbers 中。最后,我们打印出了这个列表。

除了普通的函数之外,我们也可以使用 lambda 表达式来定义筛选条件,从而更加简洁地实现过滤操作。例如,上面的例子可以进一步简化为:

Codenumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4, 6, 8, 10]

在这个例子中,我们使用了 lambda 表达式来代替普通的函数 is_even(),从而更加简化了代码。

注意:filter() 函数会返回一个迭代器,其中只包含保留下来的元素。需要注意的是,这个迭代器并不是列表,而是一种特殊的对象类型,我们可以使用 list() 函数将其转换为列表,以便于访问和处理返回结果。

map函数

map() 是 Python 内置函数之一,其作用是将一个函数映射到一个可迭代对象的所有元素上,并返回一个新的可迭代对象,其中包含原可迭代对象中每个元素经过指定函数处理后的结果。这个函数可以让我们在处理数据集合时变得更加方便。

语法:

map(function, iterable, ...)

参数:

  • function:对于每个 iterable 中的元素,都会调用 function 函数。该函数接收一个参数,并且返回一个值。

  • iterable:一个或多个序列,包括列表、元组、集合等,用于迭代执行函数 function

  • ...:可选的,可以传入多个 iterable,如果传入多个,则 map() 函数会将其作为并行的参数来执行函数 function

返回值:

  • 返回一个迭代器,包含 function 函数对 iterable 中每个元素的返回值。

具体来说,在对 map() 函数进行操作时,会对传入的 iterable 中的每个元素都调用一次 function 函数。该函数的结果被添加到一个结果列表中,并最终返回该列表。

下面是一个简单的示例,用于说明如何使用 map() 函数:

def square(n):
    return n ** 2

numbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)

print(squares)          # 输出 <map object at 0x7f...
print(list(squares))    # 输出 [1, 4, 9, 16, 25]

在上面的示例中,我们首先定义了一个 square() 函数,用于计算一个数的平方。然后,我们使用 map() 函数将这个函数应用于列表 numbers 中的每个元素上,并将结果存储在一个名为 squares 的可迭代对象中。最后,我们打印了这个可迭代对象的类型以及存储在其中的元素(通过将其转换为列表并调用 list() 函数)。

除了普通的函数之外,我们也可以使用 lambda 表达式来定义映射关系,从而更加简洁地实现数据处理操作。例如,上面的例子可以进一步简化为:

numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x ** 2, numbers)

print(squares)          # 输出 <map object at 0x7f...
print(list(squares))    # 输出 [1, 4, 9, 16, 25]

exec函数

exec() 是 Python 内置函数之一,用于执行指定的 Python 代码字符串或者编译好的 Python 代码对象。与 eval() 函数不同,exec() 可以接受多行代码并执行,而不仅仅是单个表达式。

以下是一个简单的用例,演示了 exec() 函数的基本用法:

code = '''
def greet(name):
    print(f"Hello, {name}!")
'''

exec(code)

greet("Alice") # 输出 "Hello, Alice!"
greet("Bob")   # 输出 "Hello, Bob!"

在上面的代码中,我们首先定义了一个包含函数定义的字符串 code,然后通过 exec() 执行了这段代码。由于 exec() 函数执行的代码字符串中包含了函数定义,因此在代码执行后,我们就可以直接调用代码字符串中定义的函数 greet()

需要注意的是,exec() 函数虽然非常灵活,可以方便地执行任意动态生成的 Python 代码,但是同时也具有一定的风险,特别是当从不受信任的源加载代码时。因此,建议仅在必要的情况下使用 exec() 函数,并尽可能使用更加安全的替代方案,例如 subprocess 模块等。

all函数

all() 是 Python 内置函数之一,用于接收一个可迭代对象,并返回一个布尔值。如果可迭代对象中的所有元素均为真(即非零、非空、非 None 等),则 all() 返回 True;否则,返回 False。

以下是一个简单的例子,演示了 all() 函数的基本用法:

>>> nums = [2, 4, 6, 8]
>>> all(num % 2 == 0 for num in nums)
True

>>> mixed_num = [1, 2, 3, 4]
>>> all(num % 2 == 0 for num in mixed_num)
False

在上面的代码中,我们首先定义了两个列表 numsmixed_num,分别包含不同的整数。然后,我们使用 all() 函数来检查这些整数的奇偶性。由于对于列表 nums 中的所有元素,它们均为偶数,因此 all() 函数返回 True。而对于列表 mixed_num 中的某些元素,它们是奇数,因此 all() 函数返回 False。

all()函数接受一个可迭代对象作为参数,如果可迭代对象中的所有元素都为真(非零、非空、非None等),则返回True;否则返回False。如果可迭代对象为空,则也返回True。

需要注意的是,如果传入的可迭代对象为空,则 all() 函数返回 True。

any函数

any() 是 Python 内置函数之一,用于接收一个可迭代对象,并返回一个布尔值。如果可迭代对象中的任意一个元素均为真(即非零、非空、非 None 等),则 any() 返回 True;否则,返回 False。

以下是一个简单的例子,演示了 any() 函数的基本用法:

>>> nums = [1, 3, 5, 7]
>>> any(num % 2 == 0 for num in nums)
False

>>> mixed_num = [1, 2, 3, 4]
>>> any(num % 2 == 0 for num in mixed_num)
True

在上面的代码中,我们首先定义了两个列表 numsmixed_num,分别包含不同的整数。然后,我们使用 any() 函数来检查这些整数的奇偶性。由于对于列表 nums 中的所有元素,它们均为奇数,因此 any() 函数返回 False。而对于列表 mixed_num 中的某些元素,它们是偶数,因此 any() 函数返回 True。

any()函数接受一个可迭代对象作为参数,如果可迭代对象中的任意一个元素为真,则返回True;只有当可迭代对象中的所有元素都为假时,才返回False。如果可迭代对象为空,则返回False。

需要注意的是,如果传入的可迭代对象为空,则 any() 函数返回 False。

zip函数

zip() 是 Python 内置函数之一,用于将多个可迭代对象中的元素一一对应组合成一个元组,并返回一个新的迭代器。新迭代器中的每个元素都是一个包含对应位置上所有可迭代对象元素的元组。

以下是一个简单的例子,演示了 zip() 函数的基本用法:

>>> nums = [1, 2, 3]
>>> chars = ['a', 'b', 'c']
>>> zipped = zip(nums, chars)
>>> print(list(zipped))
[(1, 'a'), (2, 'b'), (3, 'c')]

在上面的代码中,我们首先定义了两个列表 numschars,分别包含不同的整数和字符。然后,我们使用 zip() 函数将这两个可迭代对象中的元素一一对应组合成了一个新的迭代器 zipped。由于 zipped 是一个迭代器,因此需要通过 list() 函数将其转化为列表后才能输出结果。

需要注意的是,如果传入的可迭代对象长度不一致,则 zip() 函数只会返回最短可迭代对象中对应位置上的元素。例如,如果我们将上面的 nums 列表修改为 [1, 2],则 zip(nums, chars) 函数的返回值将是 [(1, 'a'), (2, 'b')]

另外,由于 zip() 函数返回的是一个迭代器,因此对于大型可迭代对象,可以通过 next() 函数或者 for 循环来逐个访问其中的元素,而不需要将所有元素都存储在内存中。

案例:

数据类型转换操作有一组用例数据如下:

cases = [
     ['case_id', 'case_title', 'url', 'data', 'excepted'],
     [1, '用例1', 'www.baudi.com', '001', 'ok'],
     [4, '用例4', 'www.baudi.com', '002', 'ok'],
     [2, '用例2', 'www.baudi.com', '002', 'ok'],
     [3, '用例3', 'www.baudi.com', '002', 'ok'],
     [5, '用例5', 'www.baudi.com', '002', 'ok'],
 ]

要求:通过相关操作转换为以下格式

res1 = [
     {'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 
'data': '001', 'excepted': 'ok'},
     {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 
'data': '002', 'excepted': 'ok'},
     {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 
'data': '002', 'excepted': 'ok'},
     {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 
'data': '002', 'excepted': 'ok'},
     {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 
'data': '002', 'excepted': 'ok'}
 ]
def zip_example():
    """

    :return:
    """
    cases = [
        ['case_id', 'case_title', 'url', 'data', 'excepted'],
        [1, '用例1', 'www.baudi.com', '001', 'ok'],
        [4, '用例4', 'www.baudi.com', '002', 'ok'],
        [2, '用例2', 'www.baudi.com', '002', 'ok'],
        [3, '用例3', 'www.baudi.com', '002', 'ok'],
        [5, '用例5', 'www.baudi.com', '002', 'ok'],
    ]
    headerLst = cases[0]
    dataLst = cases[1:]
    result = [dict(zip(headerLst, case)) for case in dataLst]
    print(result)
    pass


if __name__ == '__main__':
    zip_example()

# 输出
[{'case_id': 1, 'case_title': '用例1', 'url': 'www.baudi.com', 'data': '001', 'excepted': 'ok'}, {'case_id': 4, 'case_title': '用例4', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}, {'case_id': 2, 'case_title': '用例2', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}, {'case_id': 3, 'case_title': '用例3', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}, {'case_id': 5, 'case_title': '用例5', 'url': 'www.baudi.com', 'data': '002', 'excepted': 'ok'}]