ipython - 如何使用 start_ipython() 配置 IPython 会话?
问题描述
我有一些代码可以使用start_ipython
. 它接受config
允许传入Config()
对象的选项。
我可以做这样的事情:
c = Config()
c.InteractiveShellEmbed.colors = args.color
c.InteractiveShell.confirm_exit = args.confirmexit
c.InteractiveShell.prompts_class = MyPrompt
c.InteractiveShell.ast_node_interactivity = 'last_expr_or_assign'
IPython.start_ipython(config=c, user_ns=globals())
这会改变提示和显示行为。都好。
我还希望设置一些默认格式化程序。一旦我在 IPython 中,以下工作
plain = get_ipython().display_formatter.formatters['text/plain']
plain.for_type(np.float64, plain.lookup_by_type(float))
但我想在启动 IPython 之前进行设置。配置对象有一个DisplayFormatter
属性,但我不明白如何配置它。
一个丑陋的解决方法是
code = [
"plain = get_ipython().display_formatter.formatters['text/plain'];",
"plain.for_type(np.float64, plain.lookup_by_type(float));",
"precision('%.3g');"
]
c.InteractiveShellApp.exec_lines = code
IPython.start_ipython(config=c, user_ns=globals())
这可以解决问题,但 IPython 会话以
Out[1]: <function IPython.core.formatters.PlainTextFormatter._type_printers_default.<locals>.<lambda>(obj, p, cycle)>
Out[1]: "('%.3g');"
我不想看到(尽管行尾有分号)。
我想避免更改任何外部配置文件的需要,以便 IPython 为具有特定行为的用户开箱即用。
解决方案
格式化程序类也是可配置的。
将类型传递给格式化程序 func dict 可能对您有用。请参阅https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-BaseFormatter.type_printers。
PlainTextFormatter 还有一个设置精度的选项。参考 https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-PlainTextFormatter.float_precision
更新#1:
c.PlainTextFormatter.float_precision = "%.3f"
c.BaseFormatter.type_printers = {np.float64: lambda obj, *args: str("%.3f" % obj)}
推荐阅读
- java - 面临 vertx junit configuratoin 的问题,vertx.deployVerticle 中的错误,如何在部署测试中设置 springverticalfactory
- android - 迁移错误:如何迁移索引和类型转换器?
- javascript - 如何在 QWEB 报表中添加 TABLE 样式?奥多 14
- c# - 'System.Linq.Queryable' 类型上的'No generic method 'GroupBy' 与提供的类型参数和参数兼容
- python - 我需要在我的代码末尾打印一个计算好的奖金,但我似乎不知道怎么做。我该怎么办?
- c - 指向函数指针的 C 指针数组将程序中断超过一定长度
- php - PHP 和 Pug (phug) 项目结构
- python - 如何枚举一维数组以绘制它?matplotlib 直方图
- node.js - 使用adonis在数据库中存储数据时出错
- flutter - PS256 签到 Flutter/Dart