python - 我可以使用 map 将参数元组(或列表)插入到函数中吗?

标签 python function lambda

这个问题在这里已经有了答案:





lambda arguments unpack error

(6 个回答)


去年关闭。




我的目标是创建一个函数来检查一个数字是否在给定的范围内。

所以,我创建了一个函数 range_check(),它接受三个参数——数字、低和高。我还创建了 4 个存储为元组的测试用例。前三个测试用例为真,最后一个为假。

def range_check(num, low, high):
    return low <= num <= high


test_values = [(2, 1, 4), (5, 2, 7), (3, 1, 10), (3, 4, 5)]

for test_case in test_values:
    print(range_check(test_case[0], test_case[1], test_case[2]))

由于我最近发现了 lambda 是什么以及如何使用它(我对 Python 和一般编程还是很陌生),我想尝试使用 lambda 和 map 来解决这个问题(或者过滤器也可以在这里使用,我猜)
test_values = [(2, 1, 4), (5, 2, 7), (3, 1, 10), (3, 4, 5)]
print(list(map(lambda num, low, high: low <= num <= high, test_values)))

但是,这会产生错误 - lambda 缺少 2 个必需的参数 - 低和高。

有什么方法可以将一组参数插入到这样的函数或 lambda 中吗?

我想出的唯一一件事就是列出数字、低点和高点。
nums = [2, 5, 3, 3]
lows = [1, 2, 1, 4]
highs = [4, 7, 10, 5]

print(list(map(lambda num, low, high: low <= num <= high, nums, lows, highs)))

但在我看来,这似乎并不容易,而且以后可能很难理解。

非常感谢您提供任何帮助或想法。

最佳答案

lambda函数不能自动解包参数。 map通过 tuple到函数,而不是 3 个参数。您必须将一个参数视为 tuple并访问元素:

test_values = [(2, 1, 4), (5, 2, 7), (3, 1, 10), (3, 4, 5)]
print(list(map(lambda t: t[1] <= t[0] <= t[2], test_values)))

这就是为什么简单的列表理解要好得多的原因:您可以在循环中解压元组:
[low <= num <= high for num,low,high in test_values]

它也更快,因为您不必链接函数调用,并且不那么神秘。 map + lambda组合在速度和可读性方面并不是最好的。

结果是 [True, True, True, False]对彼此而言。

关于python - 我可以使用 map 将参数元组(或列表)插入到函数中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62049836/

相关文章:

接受两个函数并返回串联函数的 Python 函数?

function - 函数可以在 Go 中实现接口(interface)吗

c - 访问作为双指针传递给函数的 Typedef 结构指针。函数内部访问

c++ - C++中的JavaScript样式关闭

python smtplib设置超时

python - 在 python 中创建一个可重用的类

python - 有使用 Pypy 的大项目吗?

java - 如何在满足某些条件的流中找到第二个元素?

c# - Spring.NET - 作为依赖项的 Lambdas - 可能使用 XML?

python - 分组并找到前 n 个 value_counts Pandas