Pythons „with as“-Anweisung in Julia, JavaScript, Lua und anderen Sprachen

Eine der Herausforderungen für mich, das with asFeature in Python zu verstehen, ist seine Notwendigkeit nicht offensichtlich, es sei denn, Sie haben ein tieferes Verständnis der Grenzen der Python-Sprache.

Ein Ruby-, Julia-, Lua-, Go-, JavaScript- oder Swift-Entwickler zum Beispiel müsste diese Anweisung nicht hinzufügen. Warum ist das so?

Der Kern des Problems ist eine von vielen Python-Entwicklern geschätzte Funktion: die Verwendung von Einrückungen zur Kennzeichnung von Codeblöcken.

In JavaScript könnte ich zB schreiben

openfile('foobar.txt', function(file) {
  // called after file has been opened
  // file is a handle to the open file
  read_data(file)
  ...
});

openfile("foobar.txt", function(file)
  -- called after file has been opened
  -- file is a handle to the open file
  read_data(file)
  ...
end)

openfile("foobar.txt", def (file):
  # called after file has been opened
  # file is a handle to the open file
  read_data(file)
  ...

Es veranschaulicht den Vorteil, ein Symbol zu haben, um das Ende eines Codeblocks zu signalisieren, anstatt eine Änderung der Einrückung.

Verwenden von Funktionen höherer Ordnung mit Closures für die Ressourcenzuweisung und -bereinigung

Lassen Sie uns ein wenig auf die Vorteile einer benutzerfreundlichen Syntax für mehrzeilige Inline-Closures eingehen. Ich werde es mit einem Julia-Codebeispiel veranschaulichen, obwohl JavaScript, Lua und viele andere Sprachen genauso gut funktionieren würden.

function openfile(callback, filename::String)
		file = open(filename)
    callback(file)
    close(file)
end

openfile(file -> print(readline(file)), "foobar.txt")

openfile("foobar.txt") do file
		print(readline(file))
end

Das Schöne an dieser Art des Öffnens und Schließens von Dateien ist, dass Sie nicht vergessen werden, die Datei zu schließen.

Die Python-Lösung

Wie bereits erläutert, ist es schwierig, dasselbe in Python mit seiner Syntax zu erreichen. So with-aswurde erfunden. Lassen Sie mich zeigen, wie das vorherige Beispiel in Python implementiert würde.

class openfile:
   def __init_(self, filename):
       self.filename
   def __enter__(self):
       self.file =  open(self.filename)
       return file
   def __exit__(self, exc_type, exc_val, exc_tb):
       close(self.file)

Wir können diese Klasse verwenden, um eine Datei auf diese Weise zu öffnen und daraus zu lesen:

with openfile("foobar.txt") as file:
  print(readline(file))

  1. Zuerst wird der Konstruktor der openfileKlasse aufgerufen und wir speichern den Namen der Datei, die wir öffnen möchten.
  2. Eine Instanz der openfileKlasse wird an das with-asKonstrukt übergeben, wodurch seine __enter__Methode aufgerufen wird. Es soll unsere gewünschten Ressourcen beschaffen. In diesem Fall ein Dateihandle.
  3. Das zurückgegebene Objekt wird zum Argument von as. Bezieht sich also as fileauf das von zurückgegebene Objekt __enter__. Die Namen müssen nicht übereinstimmen. Wir hätten as foobarstattdessen schreiben können.
  4. Wenn der gesamte Code innerhalb des with-asBlocks ausgeführt wurde, ruft Python auf __exit__, um Ressourcen freizugeben. Dies wird auch aufgerufen, falls Ausnahmen ausgelöst werden.

Es gibt viele Variationen, wie diese Kontext-Manager -Klassen erstellt werden können, entweder durch Unterklassenbildung oder Verwendung von Dekoratoren.

Suggested posts

Informationen zu Domänennamen finden

Ein Auszug aus Small, Sharp Software Tools von Brian P. Hogan

Informationen zu Domänennamen finden

Wenn Sie eine Anfrage an facebook.com stellen, sucht Ihr Computer nach dem Domänennamen, um diesen in eine IP-Adresse zu übersetzen, damit Ihr Computer diese Verbindung herstellen kann.

Das D-Wort und das L-Wort im UI-Design. Sprachangelegenheiten. Seien Sie nicht rassistisch.

Das D-Wort und das L-Wort im UI-Design. Sprachangelegenheiten. Seien Sie nicht rassistisch.

Unsere Sprache ist ein mächtiges Werkzeug, das unsere Gedanken, Einstellungen und Handlungen formen kann. Selbst scheinbar harmlose Begriffe können schädliche Vorurteile und Stereotypen aufrechterhalten.

Related posts

Sammeln von OSINT für die Bedrohungssuche

Sammeln von OSINT für die Bedrohungssuche

Hallo, Cyber-Enthusiasten! Willkommen zurück bei der OSINT-Serie zur Bedrohungsjagd. Im ersten Artikel habe ich Ihnen einen Überblick über OSINT und seine Bedeutung bei der Bedrohungsjagd gegeben.

Warum manche Freiberufler ihr Leben vortäuschen

Warum manche Freiberufler ihr Leben vortäuschen

Ich war kürzlich auf Linkedin, dem weltweit größten professionellen sozialen Netzwerk, und habe Beiträge von freiberuflichen Designern gefunden, denen ich folge und die meine Aufmerksamkeit erregt haben. Sie alle haben Fotos aus Flugzeugen, am Strand mit ihren Laptops, aus Schwimmbädern und Büros mit atemberaubender Aussicht gepostet.

Zwei Jahre im Design – Das Gute, das Schlechte und das Hässliche…

Zwei Jahre im Design – Das Gute, das Schlechte und das Hässliche…

„Hey Siri, spiel Me Dive von Olivia Dean.“ Es war Mai 2021, als ich mein Praktikum bei der Future Academy Africa in Akure, Nigeria, begann.

3 bewährte Möglichkeiten, Ihre Schreibfähigkeiten zu verbessern

Die Vorteile des Schreibens und Strategien, die Ihnen dabei helfen

3 bewährte Möglichkeiten, Ihre Schreibfähigkeiten zu verbessern

Im Jahr 2022, mit der Veröffentlichung von GPT-3, scheinen Schreibfähigkeiten an Bedeutung zu verlieren. Mit KI können auch Menschen mit schlechten Schreibkenntnissen hochwertiges Personal hervorbringen.