Dichiarazione "con as" di Python in Julia, JavaScript, Lua e altri linguaggi

Una delle sfide per me nell'afferrare la with asfunzionalità in Python, la sua necessità non è evidente a meno che tu non abbia una comprensione più profonda dei limiti del linguaggio Python.

Ad esempio, uno sviluppatore Ruby, Julia, Lua, Go, JavaScript o Swift non avrebbe bisogno di aggiungere questa affermazione. Perché?

Al centro del problema c'è una caratteristica apprezzata da molti sviluppatori Python: l'uso dell'indentazione per indicare i blocchi di codice.

In JavaScript potrei scrivere ad es

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)
  ...

Illustra il vantaggio di avere un simbolo per segnalare la fine di un blocco di codice piuttosto che un cambiamento nel rientro.

Utilizzo di funzioni di ordine superiore con chiusure per l'allocazione e la pulizia delle risorse

Entriamo un po' nei dettagli dei vantaggi di avere una sintassi amichevole per le chiusure multilinea in linea. Illustrerò con un esempio di codice Julia, anche se JavaScript, Lua e molti altri linguaggi funzionerebbero altrettanto bene.

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

Il bello di questo modo di aprire e chiudere i file è che non ti dimenticherai di chiudere il file.

La soluzione Python

Come spiegato, è difficile ottenere lo stesso risultato in Python nella sua sintassi. Così with-asè stato inventato. Lascia che ti mostri come l'esempio precedente verrebbe implementato in Python.

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)

Possiamo usare questa classe per aprire e leggere da un file in questo modo:

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

  1. Per prima cosa viene chiamato il costruttore della openfileclasse e memorizziamo il nome del file che vogliamo aprire.
  2. Un'istanza della openfileclasse viene passata al with-ascostrutto, che fa sì che il suo __enter__metodo venga chiamato. Dovrebbe acquisire le nostre risorse desiderate. Un handle di file in questo caso.
  3. L'oggetto restituito diventa l'argomento di as. Quindi as filesi riferisce all'oggetto restituito da __enter__. I nomi non devono corrispondere. Avremmo potuto scrivere as foobarinvece.
  4. Quando tutto il codice all'interno del with-asblocco è stato eseguito, Python invocherà __exit__per rilasciare le risorse. Questo verrà anche chiamato nel caso in cui vengano generate eccezioni.

Ci sono molte variazioni nel modo in cui è possibile creare queste classi di gestione del contesto , sia tramite sottoclassi che utilizzando decoratori.

Suggested posts

Ricerca di informazioni sui nomi di dominio

Un estratto da Small, Sharp Software Tools di Brian P. Hogan

Ricerca di informazioni sui nomi di dominio

Quando fai una richiesta a facebook.com, il tuo computer cerca il nome di dominio per tradurre quel nome di dominio in un indirizzo IP in modo che il tuo computer possa effettuare quella connessione.

La parola D e la parola L in UI Design. Questioni linguistiche. Non essere razzista.

La parola D e la parola L in UI Design. Questioni linguistiche. Non essere razzista.

La nostra lingua è uno strumento potente che può modellare i nostri pensieri, atteggiamenti e azioni. Anche termini apparentemente innocui possono perpetuare pregiudizi e stereotipi dannosi.

Related posts

Il primo libro per sballarsi di un bambino

Il primo libro per sballarsi di un bambino

(Attenzione: questa è satira, destinata ad essere allegramente sovversiva, sicuramente non per bambini) Hai visto tua madre e tuo padre nascondersi in cucina e fumare quelle sigarette puzzolenti. Ti dicono.

Perché alcuni freelance stanno fingendo le loro vite

Perché alcuni freelance stanno fingendo le loro vite

Recentemente sono stato su Linkedin, il social network professionale più grande del mondo, e ho trovato post di designer freelance che seguo che hanno attirato la mia attenzione. Tutti hanno postato foto dagli aeroplani, sulla spiaggia con i loro laptop, dalle piscine e dagli uffici con viste mozzafiato.

L'apprendimento alla settimana lavorativa conta più di quanto pensi

L'apprendimento alla settimana lavorativa conta più di quanto pensi

Spesso ci troviamo a lottare per implementare ciò che sappiamo essere buono per noi. Dal dire a un altro significativo che li amiamo al ricordare di parlare come un pirata, ci saranno sempre quelli che affermeranno che un giorno, una settimana o un mese di eventi non è necessario perché stanno già facendo quelle cose.

3 modi comprovati per migliorare la tua abilità di scrittura

I vantaggi della scrittura e le strategie per aiutarti a farlo

3 modi comprovati per migliorare la tua abilità di scrittura

Nel 2022, con il rilascio di GPT-3, l'abilità di scrittura sembra diventare meno importante. Con l'intelligenza artificiale, anche le persone con una scrittura scadente possono generare personale di qualità.