Jupyter Notebook无print却打印采样结果,Py文件无此问题求解
问题:Jupyter Notebook自动打印采样结果,.py文件运行无此情况
我在实现一个采样概率密度函数,代码里没有写print函数,但在Jupyter Notebook(.ipynb文件)中运行时会自动输出采样结果;复制到.py文件中运行则不会出现这个情况。
我的代码如下:
import numpy as np def gen_b(): samples = [] num_samples = 10000 while len(samples) < num_samples: b = np.random.random() * 6 y = np.random.random() if y <= pdf_b(b): samples.append(b) return samples gen_b()
其中pdf_b(x)是一个简单的f(x) = y函数,内部没有打印逻辑。我不希望出现的输出类似:
[2.140133171853366,
3.782237422460611,
4.252458824774285,
1.9767482772032179,
...]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
原因
Jupyter Notebook的单元格默认会打印最后一行表达式的返回值。你代码的最后一行直接调用了gen_b(),这个函数返回的列表就是单元格最后一个没有被赋值的表达式结果,所以被自动输出了。而.py文件中如果没有显式调用print,函数返回值不会被自动打印。
解决方法
- 方法1:将函数调用的结果赋值给变量,避免它成为单元格最后一个无赋值的表达式:
samples = gen_b()
返回值会被存储到samples变量中,Jupyter就不会自动打印结果了。
- 方法2:在函数调用末尾添加分号
;,抑制自动输出:
gen_b();
Jupyter遇到末尾的分号时会跳过对返回值的自动打印操作。
- 方法3:如果后续不需要使用采样结果,可以用下划线变量接收返回值:
_ = gen_b()
下划线变量是Python中常用的接收不需要使用的返回值的惯例,这样既不会占用有用的变量名,也能抑制自动输出。
内容的提问来源于stack exchange,提问作者Emirkan
相关产品推荐
相关产品推荐

