Skip to main content
 首页 » 编程设计

python之我如何在此代码中使用 map()

2025年05月04日24artech

我有一个字符串列表

[str1, str2, str3.....] 

我还有一个 def 来检查字符串的格式,比如:

def CheckIP(strN): 
    if(formatCorrect(strN)): 
        return True 
    return False 

现在我要检查list中的每一个字符串,当然我可以用for来一个一个地检查。但是我可以使用 map() 来使代码更具可读性吗...?

请您参考如下方法:

您可以将您的列表映射到您的函数,然后使用 all检查它是否为每个项目返回 True:

if all(map(CheckIP, list_of_strings)): 
    # All strings are good 

实际上,去掉 CheckIP 函数并直接使用 formatCorrect 会更简洁:

if all(map(formatCorrect, list_of_strings)): 
    # All strings are good 

另外,作为一个额外的好处,all 使用惰性求值。也就是说,在返回结果之前,它只检查必要数量的项目。


但是请注意,更常见的方法是使用 generator expression而不是 map:

if all(formatCorrect(x) for x in list_of_strings): 

在我看来,生成器表达式总是比 map 更好,因为:

  1. 它们的可读性稍微好一些。

  2. 即使不比使用 map 快,它们也一样快。此外,在 Python 2.x 中,map 创建了一个通常不需要的列表对象(浪费内存)。只有在 Python 3.x 中,map 才像生成器表达式一样使用惰性计算。

  3. 他们更强大。除了将项目映射到函数之外,生成器表达式还允许您在每个项目生成时对其执行操作。例如:

    sum(x * 2 for x in (1, 2, 3)) 
    
  4. 它们是大多数 Python 程序员的首选。在编程时遵守约定很重要,因为它可以简化维护并使您的代码更易于理解。

  5. 有人说要从该语言的 future 版本中删除 map、filter 等函数。虽然这不是一成不变的,但在 Python 社区中已经多次出现。

当然,如果您是函数式编程的爱好者,您不太可能同意第一点和第四点。 :)