Polyglot Notebookfeatures
Bis hierher haben Sie mehr über Features erfahren, die Sie möglicherweise von Jupyter Notebook erwarten. Polyglot Notebooks glänzen vor allem dann, wenn Sie mit vielen verschiedenen Dingen arbeiten müssen. Sie könnten mit einer Datenquelle, einem Back-End und einem Front-End arbeiten. Vielleicht können Sie nicht dieselbe Sprache für den gesamten Stapel verwenden oder möchten es nicht.
In dieser Einheit besprechen wir eine Funktion wie magische Befehle oder genauer gesagt ein spezifisches Konzept, das als gemeinsame Nutzung von Variablen bezeichnet wird.
Arbeiten mit Datenausgabe
Wenn Sie Daten aus einer Zelle ausgeben möchten, können Sie auf verschiedene Techniken zurückgreifen:
Ausdruck: In diesem Fall platzieren Sie die Variable in einer eigenständigen Zeile wie folgt:
var name = "Diego"; nameIm Beispiel sehen Sie, wie der Variablenname ohne Semikolon in der letzten Zeile platziert wird. Polyglotte Notebooks interpretieren dies als Ausdruck und nicht als Anweisung (Code, der mit einem Semikolon abgeschlossen ist).
Sprachspezifische Ausgabe: Abhängig von der Sprache, in der Sie schreiben, weist die Art der Ausgabe von Informationen eine andere Syntax auf. Hier sind zwei Beispiele für C# bzw. JavaScript:
var name = "Diego"; Console.WriteLine(name);Als Nächstes erstellen Sie eine separate Codezelle mit JavaScript als ausgewählten Kernel:
name = "Chris"; console.log(name)Anzeigebefehl: Um die Ausgabe weiter zu verbessern, können Sie ein Anzeigehilfsprogramm verwenden. Wenn Sie die Funktion
displayaufrufen, erhalten Sie eine ansprechendere Ausgabe. Weitere Vorteile der Verwendung von Anzeigehilfsprogramm sind:- Sie können das Programm wiederholt aufrufen. Sie können z. B.
Display()mit einem der folgenden Codeschnipsel aufrufen, und jede Ausgabe wird angezeigt:
(1+1).Display(); name.Display();- Es reagiert auf Updates. Sie können das Ergebnis des Aufrufs
displayeinem Verweis zuweisen, und indem SieUpdateaufrufen, wird das Ergebnis in der Zellenausgabe wie folgt aktualisiert:
var displayRef = "initial value".Display(); System.Threading.Thread.Sleep(10000); displayRef.Update("different value");Diese Codezelle zeigt den Anfangswert und 10 Sekunden später einen anderen Wert an.
- Sie können das Programm wiederholt aufrufen. Sie können z. B.
Magic-Befehle
Magic-Befehle sind einfache Befehle, die etwas Besonderes tun. Das kann die Zeitanzeige sein, die Verbindung zu einer Datenquelle oder der Austausch von Werten zwischen Zellen und Kernels. Ein Magic-Befehl kann Parameter annehmen. Sie können einen Magic-Befehl daran erkennen, dass der Code mit #! beginnt, gefolgt vom Befehl, wie unten gezeigt:
#!mycommand
Im folgenden Beispiel verwenden wir den Befehl set. Mit dem Befehl set können wir eine Variable zwischen Kerneln verwenden. So verwenden Sie Parameter mit dem Befehl set:
#!set --value @csharp:name --name name
Mit diesem Befehl können wir die Variable name in unserem C#-Kernel für Vorgänge in unserem JavaScript-Kernel verwenden.
Freigeben von Werten zwischen Codezellen
Sie können das, was Sie in einer Zelle schreiben, in einer anderen Zelle verwenden. Wenn Sie zum Beispiel ein Array in einer Codezelle definieren, können Sie dasselbe Array in einer anderen Zelle verwenden:
let companies = ["Microsoft", "Apple"]; // a code cell
console.log(companies[0]); // a different code cell, prints "Microsoft"
Der oben gezeigte Fall ist nicht das, was wir mit der Freigabe von Variablen meinen, sondern eine integrierte Funktion. Die Variablenfreigabe kommt dann ins Spiel, wenn Sie Variablen zwischen Codezellen austauschen müssen, was im nächsten Abschnitt beschrieben wird.
Freigabe von Variablen
In diesem Szenario möchten Sie einen Code in C# und einen anderen Code in JavaScript schreiben, wahrscheinlich, um verschiedene Dinge zu erreichen. Vielleicht möchten Sie, dass der C#-Code einige Daten abruft und dann JavaScript verwendet, um sie anders zu rendern oder eine Bibliothek zu verwenden, die C# nicht hat. Nun, da wir einen Anwendungsfall haben, wie sollen wir ihn umsetzen?
Der Befehl „set“
Um Variablen freizugeben, können wir den Befehl set verwenden. Angenommen, wir haben den Code in einer C#-Codezelle geschrieben:
var cars = new []{"Saab", "Volvo","BMW" };
Console.WriteLine(cars[0]);
Um die Variable cars in einer JavaScript-Codezelle zu verwenden, müssen wir den Befehl set verwenden. Wechseln Sie zuerst Ihren Kernel zu JavaScript, und geben Sie dann diesen Code ein:
#!set --value @csharp:cars --name carsFromCSharp
console.log(carsFromCSharp)
Fassen wir zusammen, was der Befehl set bewirkt. Der Befehl set weist darauf hin, welche Variable über --value @csharp:cars freigegeben werden soll, und benennt die Variable in der JavaScript-Zelle dann carsFromCsharp.
Das Wichtigste ist, dass die Parameternamen zwar unterschiedlich, aber ansonsten gleichwertig sind.
Wie verwenden Sie also den Wert jetzt in der JavaScript-Zelle? Wir haben ihn carsFromSharp genannt und müssen also auf diesen Namen verweisen:
console.log(carsFromCSharp[0]); // prints "Saab"
Variablenansicht
Wenn Sie Variablen in Codezellen erstellen, gibt es ein UI-Element – eine Variablenansicht –, das alle erstellten Variablen nachverfolgt. In dieser Ansicht werden Informationen zu den Variablen aufgeführt, z. B. Typ, Wert, Kernel usw. Das Fenster sieht so aus:
Auf dem Bild sehen Sie den Namen der Variable (cars), ihre Werte (Saab, Volvo und BMW), ihren Typ und ihren Kernel. Der Kernel wird besonders interessant, da wir auch eine Aktionsspalte haben, mit der Sie diese bestimmte Variable in einer anderen Zelle eines anderen Kerneltyps freigeben können.
Benutzereingabe
Um Ihren Code flexibel zu gestalten, sollten Sie sich möglicherweise auf Benutzereingaben verlassen. Sie können Benutzer um Informationen zu Dingen wie Konfiguration, geheimen Schlüsseln, API-Schlüsseln und mehr bitten. Polyglotte Notebooks bieten eine Möglichkeit, Benutzereingaben mithilfe eines @input-Präfixes zu sammeln. Die Idee ist, dass Benutzer durch Hinzufügen dieses Präfixes eine Eingabeaufforderung erhalten und ihre Werte übermitteln können, die einer bestimmten Variablen zugewiesen sind. Hier ist ein Beispiel für die Funktionsweise:
#!set --name url --value @input:"Please enter a URL"
Im Code wird der Benutzer zur Eingabe mit dem Text Aufgefordert, eine URL einzugeben, und das Ergebnis wird in der url Variablen gespeichert.
Direkte Dateneingabe mit #!value
Eine weitere praktische Funktion ist, dass Werte verschiedener Typen gespeichert werden können. Stellen Sie sich vor, Sie haben ein paar Zeilen JSON oder XML und möchten den Wert einfach so speichern, wie er ist. Für diesen Aufruf können Sie das Präfix #!value verwenden. Ein Beispiel:
#!value --name productsJSON
[
{"id": 1, "name": "video game"},
{"id": 2, "name": "book"}
]
Der Vorteil an der Speicherung eines Wertes, wie hier gezeigt, ist, dass diese Variable (productsJSON) nicht an eine bestimmte Programmiersprache gebunden ist. Daher können Sie ihn aus verschiedenen Zellen mit unterschiedlichen Kernels verwenden. Sie können es beispielsweise aus einer .NET-Zelle oder JavaScript-Zelle über die Fregabe von Variables verwenden.