【问题标题】:Is there a way to call multiple functions inside one Python map function?有没有办法在一个 Python 地图函数中调用多个函数?
【发布时间】:2021-06-29 17:58:22
【问题描述】:

我目前正在进行的项目要求我将 RGB 元组转换为单个二进制字符串。

我目前正在使用output.append(''.join(map('{:0>8}'.format, map(str, map("{0:b}".format, each))))) 首先将每个元组元素转换为二进制,然后转换为字符串,最后在加入之前用零填充,这样仍然可以区分每个 RGB 元素。它工作得很好,但我想知道是否有办法只使用 一个 map() 而不是三个?

【问题讨论】:

  • 内部format 已经创建了一个字符串,因此将其映射到str 是多余的。

标签: python python-3.x binary type-conversion rgb


【解决方案1】:

这看起来过于复杂。而不是

  • 将数字格式化为二进制字符串
  • 然后用零填充这个字符串
  • 然后不必要地再次将此字符串转换为字符串

只需使用{:08b} 将一个数字一次性格式化为一个零填充的 8 位二进制字符串。

您不需要(也不能)将多个函数传递给map

''.join(map('{:08b}'.format, each))

【讨论】:

    【解决方案2】:

    不要使用map,更喜欢列表推导式或生成器。

    output.append(''.join('{:0>8}'.format("{0:b}".format(item)) for item in each))
    

    【讨论】:

      【解决方案3】:

      查看map 方法的文档。你会看到它需要一个 function 和一个 iterable。您不受限于特定方法或定义方法的方式,因此它可以是 lambda 或对内置或自定义方法的引用。因此,您可以简单地定义一个函数来调用您想要的任何方法,并将其作为参数传递。

      def func(value):
          print(f"=== {value} ===")
          print("something else...")
          # any other function called you'd like
      
      for i in map(func, [0, 1 , 2]):
          i
      

      你应该看到下面的输出:

      === 0 ===
      something else...
      === 1 ===
      something else...
      === 2 ===
      something else...
      

      【讨论】:

        猜你喜欢
        • 2021-08-15
        • 2017-02-11
        • 2021-01-08
        • 2019-01-04
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2011-11-19
        • 2020-06-05
        相关资源
        最近更新 更多