【问题标题】:Using lambda function compare values in a module在模块中使用 lambda 函数比较值
【发布时间】:2020-09-10 20:10:45
【问题描述】:

使用lambda 我想编写一个模块,其中一个函数返回两个数字中的最大值,另一个函数返回两个数字中的最小值,另一个函数返回相等的数字。每当您调用该模块时,它会自动要求两个值进行比较。

我可以这样做:

print('Input two values to compare')
a=[input(),input()]
big=lambda a: max(a)
small=lambda a: min(a)
equal=lambda a: a+['Both values are equal'] if(a[0]==a[1]) else 'Not equal'
big(a)
small(a)
equal(a)

这给了我正确的输出,但问题是我无法弄清楚如何同时运行这一切并打印所有三个输出,这里只有 equal(a) 函数将执行,但 big(a)small(a) 在单个流程中不会执行.

当我在一个模块中调用所有这些时,我打算同时执行所有这些。如果有更好的方法使用lambda,请告诉我。

【问题讨论】:

  • 所有的行都会被执行。你的意思是打印三个函数的输出吗?
  • “捕获输出”到底是什么意思?
  • 我不明白“在同一实例中捕获输出” - 如果您使用 print( big(a), small(a), equal(a) ),那么您会看到所有值。如果你以某种奇怪的方式运行它,那么它只会显示最后一个函数的结果。但是您可以创建tuple,所有结果都放在一行big(a), small(a), equal(a)(用逗号分隔)
  • @jakub 和 martineau 我打算一次打印所有 3 个函数的输出。
  • @furas 我曾尝试使用print(big(a),small(a),equal(a)),但它再次只打印相等(a)结果

标签: python python-3.x lambda


【解决方案1】:

我想我从 cmets 了解您的问题。运行 OP 帖子中的代码将仅返回最后一行的输出,即equal(a)。这就是为什么 OP 只能看到 equal(a) 的输出。

如果你打印所有三个函数的输出,你会看到输出。

print('Input two values to compare')
a = [input(), input()]
big = lambda a: max(a)
small = lambda a: min(a)
equal = lambda a: a + ['Both values are equal'] if a[0] == a[1] else 'Not equal'
print(big(a), small(a), equal(a))

如果你输入1010,输出如下:

Input two values to compare
10
10
10 10 ['10', '10', 'Both values are equal']

如果你输入105,输出如下:

Input two values to compare
10
5
5 10 Not equal

关于您的代码的一些注意事项。

  • input() 返回一个字符串,所以如果你想要一个数字,你需要转换成intfloat
  • 内置函数minmax 完全符合bigsmall 的功能。你可以简单地写big = maxsmall = min,但我建议直接使用minmax而不是给它们取另一个名字。

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 2021-04-04
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多