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.
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.
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))
openfileKlasse aufgerufen und wir speichern den Namen der Datei, die wir öffnen möchten.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.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.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.
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.
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.
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.
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.
„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.
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.