IPython %运行 magic -n 开关不工作
IPython %run magic -n switch not working
我正在 运行通过在另一个(父)笔记本中使用 %run
魔法来创建一个 IPython 笔记本。
如果使用 %run
调用,我想隐藏子笔记本中的一些输出,我认为我可以通过测试 if __name__ == '__main__'
来做到这一点
IPython 文档说,当使用 %run -n
开关时:
__name__
is NOT set to __main__
, but to the running file's name without extension (as python does under import). This allows running
scripts and reloading the definitions in them without calling code
protected by an if __name__ == "__main__"
clause.
但是,它对我来说似乎不起作用。我试过这个:
在sub_notebook.ipynb
中:
print(__name__)
在parent_notebook.ipynb
中:
%run -n sub_notebook.ipynb
这会打印 __main__
但文档说它应该打印 sub_notebook
.
请告诉我如何在 sub_notebook.ipynb
中选择性地 运行 编码,具体取决于它是单独 运行 还是使用 %run
?
我正在 运行宁 IPython 版本 6.1.0
source code to %run 设置了 __file__
变量,因此我们可以对此进行测试。
我们可以写成sub_notebook.ipynb
:
try:
__file__
print('I am in an imported notebook')
except NameError:
print('I am not in an imported notebook')
运行 单独打印 I am not in an imported notebook
我们可以创建父笔记本 parent_notebook.ipynb
包含:
%run sub_notebook.ipynb
运行 正确打印 I am in an imported notebook
.
我们可以在sub_notebook.ipynb
内编写一个简单的测试:
def has_parent():
"""Return True if this notebook is being run by calling
%run in another notebook, False otherwise."""
try:
__file__
# __file__ has been defined, so this notebook is
# being run in a parent notebook
return True
except NameError:
# __file__ has not been defined, so this notebook is
# not being run in a parent notebook
return False
那么可以保护父笔记本中不应该打印的代码:
if not has_parent():
print('This will not print in the parent notebook')
我正在 运行通过在另一个(父)笔记本中使用 %run
魔法来创建一个 IPython 笔记本。
如果使用 %run
调用,我想隐藏子笔记本中的一些输出,我认为我可以通过测试 if __name__ == '__main__'
IPython 文档说,当使用 %run -n
开关时:
__name__
is NOT set to__main__
, but to the running file's name without extension (as python does under import). This allows running scripts and reloading the definitions in them without calling code protected by anif __name__ == "__main__"
clause.
但是,它对我来说似乎不起作用。我试过这个:
在sub_notebook.ipynb
中:
print(__name__)
在parent_notebook.ipynb
中:
%run -n sub_notebook.ipynb
这会打印 __main__
但文档说它应该打印 sub_notebook
.
请告诉我如何在 sub_notebook.ipynb
中选择性地 运行 编码,具体取决于它是单独 运行 还是使用 %run
?
我正在 运行宁 IPython 版本 6.1.0
source code to %run 设置了 __file__
变量,因此我们可以对此进行测试。
我们可以写成sub_notebook.ipynb
:
try:
__file__
print('I am in an imported notebook')
except NameError:
print('I am not in an imported notebook')
运行 单独打印 I am not in an imported notebook
我们可以创建父笔记本 parent_notebook.ipynb
包含:
%run sub_notebook.ipynb
运行 正确打印 I am in an imported notebook
.
我们可以在sub_notebook.ipynb
内编写一个简单的测试:
def has_parent():
"""Return True if this notebook is being run by calling
%run in another notebook, False otherwise."""
try:
__file__
# __file__ has been defined, so this notebook is
# being run in a parent notebook
return True
except NameError:
# __file__ has not been defined, so this notebook is
# not being run in a parent notebook
return False
那么可以保护父笔记本中不应该打印的代码:
if not has_parent():
print('This will not print in the parent notebook')