在IPython笔记本中反应式地编织文档
项目描述
受Tangle启发,在Jupyter Notebook中的反应式叙述。
安装
使用以下命令获取最新版本:
或者使用最新版本
pip install ipytangle
使用
pip install -e git+https://github.com/bollwyvl/ipytangle#egg=IPyTangle
用法
在笔记本中,编写以下python…
from ipytangle import tangle
tangle(cookies=3, calories=lambda cookies: cookies * 50)
然后是以下markdown
When you eat [`cookies` cookies](#:cookies), you consume [`calories` calories](#:calories).
你会看到类似这样的内容
当你吃 `2 个饼干 <#:cookies>`__,你将消耗 `150 卡路里 <#:>`__。
与链接的交互将导致结果更新。
示例
改编自Tangle的原始内容。
此外,ipytangle还集成了IPython的interact,这是开始使用小部件的最简单方法。
`与tangle交互` <notebooks/examples/Interacting%20with%20a%20tangle.ipynb>`__
将`interact`编织在一起 <notebooks/examples/Tangling%20up%20interact.ipynb>`__
Markdown
ipytangle实现了大多数TangleKit基本功能,作为markdown链接。因为它没有添加新的符号,未渲染的Tangle Markdown仍然可以以有用的方式显示。
通常,将链接视为
[what the user sees](#:tangle types)
在链接文本中,反引号(``)用于表示在用户交互、级联更新或其他内核更新时将更新的JavaScript表达式。除了使用 ipytangle 定义的任何变量外,还提供了一些 格式化 库。全局变量 window 也应该可以正常工作 :wink:。
只有生成的 代码 块将被转换,其余的元素(如果有)将保持不变。这意味着您可以在控制标签内部使用图像,例如。
链接类型
[\<stringy expression>](#:)
仅显示视图
For [`years` years](#:) have I trained Jedi.
[\<stringy expression>](#:<variable>)
显示视图并根据拖动更新整数
[made the kessel run in `distance` parsecs](#:distance)
[<booly expression>](#:if) … [_ ``[<booly expression>](#elif)``_] … [_ ``[](#:else)`` _] … [](#:endif)
标记一些文本(可能包含其他字段),以便根据条件显示
What's more foolish? The [`fool_is_more_foolish`](#:if)fool[](#:else)the fool who follows him(#:endif).
您还可以有 else 和任意数量的 elif… 因为它们是 markdown span-level 元素,您可以使用换行符以方便编辑
[`feeling == "bad"`](#:if) I have a bad feeling about this.
[`feeling == "cautious"`](#:elif) You will never find a more wretched hive of scum and villainy.
[](#:else) Search your feelings.
[](#:endif)
建议的链接类型
[\<stringy expression>](#:<variable>:(int|float):<min>:<max>:<step>)
显示视图并根据某些 type 类型的变量更新。此外,可以指定 minimum、maximum 和 step-size 值。
[](#:<variable>:inline)
用注册了链接小部件的 variable 替换(待定),以小部件本身的方式内联显示。> 需要研究。
小部件
在它的核心,ipytangle 提供 Tangle,一个 IPython Widget。由于这个原因,一个 Tangle 可以通过 traitlets 和 links 连接到任何其他 IPython 小部件。与许多小部件不同,一个 Tangle 并没有在其屏幕空间上做很多工作,可能不太适合放入布局中。然而。
创建 Tangle 有几种方法。
ipytangle.tangle
就像上面的例子一样,这试图采取最 Pythonic 的方法。
from ipytangle import tangle
square = tangle(x=1, y=(1, lambda x: x*x))
print("square is", square)
square.x = 2
print("y is", square.y)
square is <IPython.utils.traitlets.DynamicAutoTangle139717235746760 object at 0x7f1274347ef0> y is 4
链接到其他小部件
tangle 使处理其他核心和自定义小部件变得容易,自动复制属性信息。如果小部件实现了 value,如大多数核心小部件所做的那样,您可以直接引用它。或者,指定一个 tuple 的 (widget, "trait_name") 以订阅该属性。
from IPython.html.widgets import IntSlider
x = IntSlider(1)
square = tangle(x=x, y=(1, lambda x: x*x))
print("square is", square)
x.value = 2
print("y is", square.y)
square is <IPython.utils.traitlets.DynamicAutoTangle139717235839048 object at 0x7f1274362080> y is 4
ipytangle.Tangle
如果您已经熟悉小部件,子类化 Tangle 可能是最方便的
from ipytangle import Tangle
from IPython.utils import traitlets
class Square(Tangle):
x = traitlets.CInt(1, sync=True)
y = traitlets.CInt(1, sync=True)
def _x_changed(self):
self.y = self.x * self.x
square = Square()
print("square is", square)
square.x = 2
print("y is", square.y)
square is <__main__.Square object at 0x7f127434b7f0> y is 4 A future version of IPython Widgets will allow dynamically-added traits with ``add_trait``. This will open up whole new areas for tinkering. Stay tuned!
格式化
除了您局部绑定的变量外,ipytangle 还捆绑了一些用于格式化文本和数字的漂亮的 JavaScript 库和快捷方式: - `moment` <https://moment.js.cn/> 日期和时间 - `mathjs` <http://mathjs.org/> 科学单位- [numeral](http://numeraljs.com/) 货币和杂项
灵感
当然,Brett Victor 的 Tangle 是主要的灵感来源,还有: - tributary - derby - d3
路线图
支持 TangleKit 基础
浮点数
开关
\(L_AT^EX\)(如上所述)
Sparklines、分布等。
离线/nbviewer?
项目详情
ipytangle-0.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 25a7cc47c7f750b0df1c885473f0b64493b55a8a8e8d2bd9a1e555f4e4a8d630 |
|
MD5 | 159d5deaa4f1350b2f8a3f03bb90d101 |
|
BLAKE2b-256 | e0018fa4e3dabf4f87ada66ff832c40d1236f77a3c41ae76777a85031e0bcf6b |