有没有办法在一个 Python 映射函数中调用多个函数?
Is there a way to call multiple functions inside one Python map function?
我目前正在进行的项目需要我将 RGB 元组转换为单数二进制字符串。
我目前正在使用 output.append(''.join(map('{:0>8}'.format, map(str, map("{0:b}".format, each)))))
首先将每个元组元素转换为二进制,然后转换为字符串,最后在加入之前用零填充,因此仍然可以区分每个 RGB 元素。它工作得很好,但我想知道是否有办法只使用 一个 map()
而不是三个?
查看 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...
不要使用 map
,更喜欢列表理解或生成器。
output.append(''.join('{:0>8}'.format("{0:b}".format(item)) for item in each))
这看起来太复杂了。而不是
- 将数字格式化为二进制字符串
- 然后用零填充这个字符串
- 然后不必要地将此字符串再次转换为字符串
只需使用 {:08b}
一次性将数字格式化为零填充的 8 位二进制字符串。
您不需要(也不能)将多个函数传递给 map
。
''.join(map('{:08b}'.format, each))
我目前正在进行的项目需要我将 RGB 元组转换为单数二进制字符串。
我目前正在使用 output.append(''.join(map('{:0>8}'.format, map(str, map("{0:b}".format, each)))))
首先将每个元组元素转换为二进制,然后转换为字符串,最后在加入之前用零填充,因此仍然可以区分每个 RGB 元素。它工作得很好,但我想知道是否有办法只使用 一个 map()
而不是三个?
查看 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...
不要使用 map
,更喜欢列表理解或生成器。
output.append(''.join('{:0>8}'.format("{0:b}".format(item)) for item in each))
这看起来太复杂了。而不是
- 将数字格式化为二进制字符串
- 然后用零填充这个字符串
- 然后不必要地将此字符串再次转换为字符串
只需使用 {:08b}
一次性将数字格式化为零填充的 8 位二进制字符串。
您不需要(也不能)将多个函数传递给 map
。
''.join(map('{:08b}'.format, each))