我有一个字符串列表
[str1, str2, str3.....]
Run Code Online (Sandbox Code Playgroud)
我还要def检查字符串的格式,例如:
def CheckIP(strN):
    if(formatCorrect(strN)):
        return True
    return False
Run Code Online (Sandbox Code Playgroud)
现在我想检查列表中的每个字符串,当然我可以用来逐个检查.但是我可以使用它map()来使代码更具可读性吗?
您可以将列表映射到您的函数,然后使用all它来检查它是否True为每个项目返回:
if all(map(CheckIP, list_of_strings)):
    # All strings are good
Run Code Online (Sandbox Code Playgroud)
实际上,只是摆脱CheckIP功能并formatCorrect直接使用会更简洁:
if all(map(formatCorrect, list_of_strings)):
    # All strings are good
Run Code Online (Sandbox Code Playgroud)
此外,作为额外的奖励,all使用懒惰评估.这意味着,它只会在返回结果之前检查所需的项目数.
但请注意,更常见的方法是使用生成器表达式而不是map:
if all(formatCorrect(x) for x in list_of_strings):
Run Code Online (Sandbox Code Playgroud)
在我看来,生成器表达总是比map因为:
它们更具可读性.
如果不比使用速度快,它们也同样快map.此外,在Python 2.x中,map创建一个通常不必要的列表对象(浪费内存).只有在Python 3.x中才会map像生成器表达式一样使用延迟计算.
它们更强大.除了将项目映射到函数之外,生成器表达式还允许您在生成每个项目时对其执行操作.例如:
sum(x * 2 for x in (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)它们是大多数Python程序员的首选.在编程时保持常规非常重要,因为它可以简化维护并使您的代码更易于理解.
有没有像去除功能的讲map,filter从语言的未来版本,等等.虽然这不是一成不变的,但它在Python社区中已经出现过很多次了.
当然,如果你是函数式编程的粉丝,你就不太可能同意第一和第四点.:)