在交互模式下在python中执行多行语句

时间:2017-12-24 21:27:05

标签: python pycharm

我是Python的新手,这是我在Python中的第一个程序。我来自R的世界所以这对我来说有点不直观。

执行时

In[15]: import math
   ...: import random
   ...: random.random()
   ...: math.sqrt(85)
   ...: 

在交互模式下(即在>>>提示符下),我得到math.sqrt()的输出。我根本没有看到随机数。但是,当我单独执行random.random()math.sqrt()时,我确实得到了两个结果。为什么是这样?我如何得到两个结果?我问这个是因为我习惯在R中选择多行并以交互模式执行它们,特别是在我尝试调试代码时。在尝试调试(例如,2000行代码)时,一次只执行一行将是极其痛苦的。

这是当我在R中选择多行然后执行它们时会发生什么:

runif(1,0,1)
  sqrt(85)

它会自动解析这些行并生成以下输出:

> runif(1,0,1)
[1] 0.01597949
>   sqrt(85)
[1] 9.219544

我研究了SO并找到了Write multi-line statement on single line。我不确定如何使用这个帖子的正式答案。

这是PyCharm的输出:

import math
import random
random.random()
math.sqrt(85)
Out[15]: 9.219544457292887

我正在寻找一种机制来查看随机数和85的sqrt,而不必像在R代码中那样添加任何分隔符,;。我很感激任何想法。

预期输入:可以使用"使用控制台"执行选择来运行代码。在PyCharm [键盘快捷键:Alt + Shift + E]

import math
import random
random.random()
math.sqrt(85)

[请注意,我还没有使用任何分隔符";"或者"," - 就像我们在R中做的那样

预期输出:

random.random()
Out[16]: 0.183145720117748
math.sqrt(85)
Out[17]: 9.219544457292887

2 个答案:

答案 0 :(得分:1)

您可能只看到math.sqrt()输出的原因之一是因为默认情况下ipython / jupyter只会输出多行命令的最后一行。 Python解释器逐行执行代码,任何未明确打印的语句(如random.random())都只是被评估并丢弃。 Ipython / Jupyter 默认情况下获取最后一行的结果并显示它。我没有使用pycharm,但它可能做同样的事情。要查看random.random()的输出,您有两个选择:

1)使用如下的打印声明。

In [1]: import math
import random
print random.random()
math.sqrt(5)
   ...: 
0.145504928627
Out[1]: 2.23606797749979

In [2]: 

2)通过将ast_node_interactivity参数更改为已解答here

来更改默认行为
In [1]: from IPython.core.interactiveshell import InteractiveShell

In [2]: InteractiveShell.ast_node_interactivity = "all"

In [3]: import math
import random
random.random()
math.sqrt(5)
   ...: 
Out[3]: 0.9772320535532782
Out[3]: 2.23606797749979

IPython有各种各样的魔术命令,如%edit%load,它们允许您直接编辑您喜欢的编辑器中的命令,或从下面的文件中加载特定的代码行。这有助于您选择长代码的特定部分并单独运行它们。下面我将上述行保存在名为test_interpreter.py的文件中。

In [1]: !cat test_interpreter.py
import math
import random
print random.random()
math.sqrt(5)

In [2]: load -r 1-4 test_interpreter.py

In [3]: # %load -r 1-4 test_interpreter.py
import math
import random
print random.random()
math.sqrt(5)
   ...: 
0.719244573423
Out[3]: 2.23606797749979

默认情况下,unix shell中的python REPL不支持多行命令(据我所知)但您可以使用;来终止并使用\作为转义字符开始一个新行for readline python REPL使用的。

>>> import math;\
... import random;\
... random.random();\
... math.sqrt(5)
0.10298483416372617
2.23606797749979

在普通的python解释器和ipython中,你可以直接从编辑器中复制粘贴行,它们将像下面一样单独评估。

#Copy paste four lines together
>>> import math
>>> import random
>>> random.random()
0.16039452147586075
>>> math.sqrt(5)
2.23606797749979

答案 1 :(得分:0)

在Python 2.7.10控制台中,执行以下操作:导入数学和随机数,获取随机数,并获取数字输出的平方根:

>>> import math
>>> import random
>>> random.random()
0.52350453737542
>>> math.sqrt(85)
9.219544457292887 

如果要连续打印两个值,可以编写由分号运算符分隔的多行语句:

>>> import math
>>> import random
>>> random.random(); math.sqrt(85)
0.9031053664569808
9.219544457292887