لقد توصلت إلى فكرة أنه سيكون من الرائع تحرير علامات الخلايا بمساعدة IPython magic بدلاً من النقر بالماوس والتفاعل مع العلامات أو أشرطة أدوات البيانات الأولية. لذلك ، الآن يمكنني القيام بذلك عن طريق كتابة هذا الرمز مباشرة في منطقة إدخال الخلية:
%tags foo bar baz
TL ؛ د
انتقل إلى هذا المعرف لرؤية مقتطف الشفرة (ترخيص MIT).
مقدمة
مشروع Jupyter هو أداة مذهلة للبرمجة التفاعلية وتصور البيانات. عندما يتعلق الأمر بتقديم نتيجة لجهود البرمجة المنجزة في دفتر ملاحظات Jupyter ، فهناك أدوات مثل nbconvert والأصدقاء ، والتي تسمح بتصدير نتيجة العمل إلى تنسيق PDF أو HTML. غالبًا ما يريد المرء تلميع دفتر الملاحظات لإنشاء تقرير ، على سبيل المثال عن طريق إخفاء خلايا رمز معينة أو القيام بمعالجة أخرى أثناء التحويل. لهذه الأغراض ، يدعم Jupyter تخصيص بيانات وصفية أو علامات إضافية لخلايا الكمبيوتر المحمول.
ومع ذلك ، فإن Jupyter UI لإدارة البيانات الأولية للخلية مزعجة بعض الشيء ، لأنها تنطوي على الكثير من النقر بالماوس. أحب الاحتفاظ بيدي بلوحة المفاتيح واستخدام الاختصارات لفعل الأشياء ، كلما أمكن ذلك. أفضل طريقة لتخزين هذه المعلومات مباشرة في خلية التعليمات البرمجية. يدعم Python kernel (IPython) لجهاز الكمبيوتر الدفتري Jupyter ما يسمى٪٪ من الأوامر السحرية ، والتي تسمح بمعالجة سطر المصدر المقابل بأي طريقة مخصصة.
كود
لتغيير بيانات الخلية الأولية ، نحتاج إلى التحدث مع نواة Jupyter. اكتشفت أن هذا ممكن من كود جافا سكريبت. لحقنه في دفتر الملاحظات ، يمكننا استخدام كائن عرض خاص ، على سبيل المثال:
from IPython.display import Javascript, display display(Javascript('alert("hi!")'))
ضمن كود javascript ، وفقًا للدليل: "سيتوفر العنصر المحتوي element
".
الآن يمكننا كتابة وظيفة المساعد التي من شأنها أن تجد خلية الإدخال المقابلة وتعديل البيانات الوصفية:
define('setTags', function() { return function(element, tags) { var cell_element = element.parents('.cell'); var index = Jupyter.notebook.get_cell_elements().index(cell_element); var cell = Jupyter.notebook.get_cell(index); cell.metadata.tags = tags; } });
لمعالجة نطاق الوظائف ، أستخدم مكتبة requjs المتاحة في المشتري.
أخيرًا ، نحدد custom٪ magic التي تستخدم هذه الوظيفة.
from IPython.core.magic import register_cell_magic, register_line_cell_magic from IPython.display import Javascript, display import json def _set_tags(tags): assert all(map(lambda t: isinstance(t, str), tags)) display(Javascript( """ require(['setTags'], function(setTags) { setTags(element, %s); }); """ % json.dumps(tags) )) @register_line_cell_magic def tag(line, cell=None): _set_tags(line.split())
في النهاية هناك لقطة شاشة لجميع الخطوات الموضحة أعلاه:

من الممكن تحديد الأوامر أعلاه في custom.js
ووحدة بيثون لمشاركة الكود عبر دفاتر ملاحظات مختلفة. مشكلة معروفة: لا يتم تحديث شريط أدوات العلامات تلقائيًا.