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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在交互模式下在python中执行多行语句相关的知识,希望对你有一定的参考价值。

我是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
答案

您可能只看到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不支持多行命令(据我所知)但你可以使用;终止并用开始一个新行,readline是python REPL使用的>>> import math; ... import random; ... random.random(); ... math.sqrt(5) 0.10298483416372617 2.23606797749979 的转义字符。

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

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

>>> import math
>>> import random
>>> random.random()
0.52350453737542
>>> math.sqrt(85)
9.219544457292887 
另一答案

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

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

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

qazxswpoi

以上是关于在交互模式下在python中执行多行语句的主要内容,如果未能解决你的问题,请参考以下文章

我无法在 Coffeescript 交互模式(REPL)中编写多行代码

如何在Python自己的调试器(PDB)中执行多行语句

如何在 Python 自己的调试器 (PDB) 中执行多行语句

在单行命令行中执行多行语句?

Python在交互环境敲代码时怎么换行,每次一按Enter键就直接执行程序了,可是代码还没有写完啊

python测试与调试提示