【问题标题】:Prevent Python from printing return result防止 Python 打印返回结果
【发布时间】:2015-12-29 18:48:49
【问题描述】:

我有一个既能返回值又能打印的函数。示意图:

def func(x):
 print "You're using this function"
 return x**2

我可能希望以两种不同的方式使用该函数,一种是打印以便我可以读取信息,另一种是打印并将结果存储在一个变量中:

>>> func(2)
You're using this function
4
>>> a=func(2)
You're using this function

我想阻止第一次使用打印4。我可以通过某种方式修改函数定义吗?


编辑

由于人们似乎很难理解我来自哪里,因此这是我的函数在交互使用时的输出:

>>> ela_dist(c_voigt, rotate = True)

************************** R E S U L T S **************************
Results with rotation optimization                                 

Symmetry     Euclidean distance     Angles tx,     ty,     tz      
--------     ------------------     -------------------------------
     iso             139.65 GPa           n/a     n/a     n/a  deg.
     cub              83.66 GPa         -1.89   -1.83    6.37  deg.
     hex             110.23 GPa         -2.14   -4.22     n/a  deg.
       3             102.16 GPa         -3.27   -6.94     n/a  deg.
      32             102.16 GPa         -3.27   -6.94     n/a  deg.
       4              82.32 GPa         -2.52   -1.15    2.14  deg.
     4mm              82.32 GPa         -2.52   -1.15    6.31  deg.
     ort              78.00 GPa         -3.05   -1.71    7.87  deg.
     mon              62.62 GPa         -2.85    0.76    7.62  deg.
************************** R E S U L T S **************************

[['iso', 139.65433517558037, 0.0, 0.0, 0.0], ['cub', 83.663957459095329, -1.8878916427147878, -1.8303975226851734, 6.3671511063645525], ['hex', 110.23296814646618, -2.1378994103876803, -4.2246840445795071, 0.20038249224556773], ['3', 102.16396472738577, -3.2709875018178636, -6.9354445747734825, 5.1898595103729814], ['32', 102.16396472738596, -3.2709866369782259, -6.9354442259896656, -20.03283399363794], ['4', 82.321990809120038, -2.5218897967148739, -1.1525909395834488, 2.1400405876841635], ['4mm', 82.32199080912001, -2.5218897552576087, -1.1525909978835307, 6.3069829557712076], ['ort', 78.001968057183262, -3.0530030281994716, -1.7132006819033545, 7.8685738019737688], ['mon', 62.623413013297196, -2.8503971823612497, 0.75895564714111607, 7.6204664688915926]]

所以我正在生成一个“不错”的输出,然后有一个长长的列表,其中包含我不想显示的结果。但是,我希望用户能够将结果存储在变量中以供以后使用。

【问题讨论】:

  • 那么不要在 Python 交互式会话中使用该函数。它与表达式的结果相呼应,这就是您看到 4 正在打印的原因。您可以使用temp = func(2) 来防止这种情况发生。
  • 我从来没有这么快看到这么多反对票。这个问题有什么明显的问题(老实说,我想知道)?
  • 好吧,一个最小的例子是在 python 控制台中输入2。该问题与在函数中打印甚至只是调用它无关。
  • @KarolyHorvath 那么我会因为不知道这一点而受到惩罚?如果您因不知道问题的答案而受到处罚,该网站应该如何运作。显然,如果我知道无法阻止这种行为,我就不会问这个问题。
  • 我不知道为什么这个问题被如此低估。这是我刚才想问的完全相同的问题,所以我投了赞成票。感谢在这 5 次快速投票后没有删除问题。

标签: python


【解决方案1】:

因为您是在交互式解释器中运行代码,所以总是会打印出返回值。如果在脚本中运行代码,则不会打印返回值。

一般来说,打印返回值并没有真正的缺点,它对调试非常有用。如果您希望其他人使用您的代码,那么无论如何您都不应该以这种方式运行它。


进一步编辑后,您可能希望根据函数是否在交互式解释器中运行来调整函数的行为。有关详细信息,请参阅此问题:Tell if Python is in interactive mode

从那里接受的答案:

__main__.__file__ 在交互式解释器中不存在:

import __main__ as main 
print hasattr(main, '__file__')

这也适用于通过python -c 运行的代码,但不适用于python -m

例如,您可以决定不返回您正在执行的值。但是,这并不能真正解决您的问题。

我建议你做的,虽然你可能会说它会让你的程序对用户来说有点笨拙,但是定义一个显示函数,如果你的用户想要漂亮的结果表,它将被调用。用法将是

>>> display(ela_dist(c_voigt, rotate = True))

或类似的东西。

【讨论】:

  • 我期待有人使用该代码。我应该如何运行它?
  • @Miguel 通过编写代码并将其保存在.py 文件中。然后他们可以从终端/命令行或任何其他适用的方式运行它。
  • 但我希望人们能够以交互方式和从脚本中使用它。该函数已在.py 文件中,用法与导入模块相同。
  • @Miguel 如果您希望人们能够在交互式解释器中使用它,那么您可能必须在考虑到行为的情况下满足您的返回值。我想不出返回值不包含以这种特定方式对用户有用的信息的示例,但我承认它们可能存在。老实说,我不知道你为什么在这里得到如此极端的回应,这对一个真正的问题似乎有点不公平。
  • @enigma 我只是更好地说明了这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 2011-01-29
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多