【问题标题】:How to ignore an output of a multi-output function in Python? [duplicate]如何在 Python 中忽略多输出函数的输出? [复制]
【发布时间】:2013-03-14 05:55:39
【问题描述】:

假设我有一个函数:

def f():
  ...
  ...
  ...
  return a,b,c

我只想在函数的输出中得到 b。我必须使用哪个作业?

谢谢。

【问题讨论】:

    标签: python function output


    【解决方案1】:

    您可以将返回的元组解包为一些虚拟变量:

    _, keep_this, _ = f()
    

    不一定是_,只是一些明显未使用的东西。

    (不要在交互式解释器中使用_作为虚拟名称,它用于保存最后的结果。)

     

    或者,索引返回的元组:

    keep_this = f()[1]
    

    【讨论】:

    • 领先我几秒钟!该死!
    • @Naji 基本上,代码所做的就是将元组的三个部分分配给三个变量。单个下划线是一个有效的变量名,它可以在一次解构赋值中多次赋值。因此,当该赋值完成时,您将有两个变量:keep_this,它等于元组中的中间值,以及 _,它(如果我是正确的)等于元组中的最后一个值。您应该查看解构分配以了解更多信息。
    • 这些变量没有什么特别之处。你可以写x, y, z = f() 而忽略xz_ 这个名字不太可能对其他任何东西有用。
    • 如果你的函数返回一个矩阵已经存在的巨大矩阵(不像 Haskell 使用的惰性求值);如果您愿意,可以使用del _ 放弃对它的引用。顺便说一句,_ 是交互式解释器中的一个特殊变量,保存最后一个返回值。
    • @Naji 该函数将返回它必须返回的所有内容,您对此无能为力。如果它返回一个矩阵,而您只需要其中的一个值,请使用第二种方法。
    【解决方案2】:
    def f():
        return 1,2,3
    

    在这里,f() 返回一个元组 (1,2,3),因此您可以执行以下操作:

    a = f()[0]
    print a
    1
    
    a = f()[1]
    print a
    2
    
    a = f()[2]
    print a
    3
    

    【讨论】:

      【解决方案3】:

      您对return a,b,c 行所做的是创建一个tuple,然后从函数中返回它。因此,您可以使用元组解构来仅从结果中获取您想要的值。示例:

      def f(x):
          return x, x + 1, x + 2
      _, b, _ = f(0)
      print(b) # prints "1"
      

      【讨论】:

      • 作为一个附带问题,为什么代码都在一行?我输入了几行...
      • 你设法在其中放置了一个SOH (0x01, CTRL-A) 字符。
      • 我不知道我是怎么做到的!
      猜你喜欢
      • 2017-02-27
      • 1970-01-01
      • 2011-03-04
      • 2013-12-15
      • 2013-01-22
      • 2020-12-30
      • 1970-01-01
      相关资源
      最近更新 更多