Déclaration "with as" de Python dans Julia, JavaScript, Lua et d'autres langages

L'un des défis pour moi de saisir la with asfonctionnalité en Python, son besoin n'est pas apparent à moins que vous n'ayez une compréhension plus approfondie des limites du langage Python.

Un développeur Ruby, Julia, Lua, Go, JavaScript ou Swift, par exemple, n'aurait pas besoin d'ajouter cette déclaration. Pourquoi donc?

Au cœur du problème se trouve une fonctionnalité chère à de nombreux développeurs Python : l'utilisation de l'indentation pour indiquer les blocs de code.

En JavaScript, je pourrais écrire par exemple

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

Il illustre l'avantage d'avoir un symbole pour signaler la fin d'un bloc de code plutôt qu'un changement d'indentation.

Utilisation de fonctions d'ordre supérieur avec des fermetures pour l'allocation et le nettoyage des ressources

Entrons un peu dans les détails des avantages d'avoir une syntaxe conviviale pour les fermetures multilignes en ligne. Je vais illustrer avec un exemple de code Julia, bien que JavaScript, Lua et de nombreux autres langages fonctionnent tout aussi bien.

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

La beauté de cette façon d'ouvrir et de fermer des fichiers, c'est que vous n'oublierez pas de fermer le fichier.

La solution Python

Comme expliqué, il est difficile d'obtenir la même chose dans Python sa syntaxe. Ainsi with-asa été inventé. Permettez-moi de montrer comment l'exemple précédent serait implémenté en 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)

Nous pouvons utiliser cette classe pour ouvrir et lire un fichier de cette manière :

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

  1. Tout d'abord, le constructeur de la openfileclasse est appelé et nous stockons le nom du fichier que nous voulons ouvrir.
  2. Une instance de la openfileclasse est passée à la with-asconstruction, ce qui provoque l' __enter__appel de sa méthode. Il est censé acquérir nos ressources désirées. Un descripteur de fichier dans ce cas.
  3. L'objet renvoyé devient l'argument de as. Se réfère donc as fileà l'objet renvoyé par __enter__. Les noms ne doivent pas correspondre. Nous aurions pu écrire as foobarà la place.
  4. Lorsque tout le code à l'intérieur du with-asbloc a été exécuté, Python invoquera __exit__pour libérer les ressources. Cela sera également appelé au cas où des exceptions seraient levées.

Il existe de nombreuses variantes dans la manière de créer ces classes de gestionnaire de contexte , soit en sous-classant, soit en utilisant des décorateurs.

Suggested posts

Recherche d'informations sur les noms de domaine

Un extrait de Small, Sharp Software Tools par Brian P. Hogan

Recherche d'informations sur les noms de domaine

Lorsque vous faites une demande à facebook.com, votre ordinateur recherche le nom de domaine pour traduire ce nom de domaine en une adresse IP afin que votre ordinateur puisse établir cette connexion.

Le mot D et le mot L dans UI Design. La langue compte. Ne soyez pas raciste.

Le mot D et le mot L dans UI Design. La langue compte. Ne soyez pas raciste.

Notre langue est un outil puissant qui peut façonner nos pensées, nos attitudes et nos actions. Même des termes apparemment inoffensifs peuvent perpétuer des préjugés et des stéréotypes nuisibles.

Related posts

L'art est-il toujours apolitique ?

L'art est-il toujours apolitique ?

Hier, nous avons fermé la porte du concours Eurovision de la chanson de cette année avec une grande finale scintillante et chaotique où la chanteuse suédoise Loreen a remporté le trophée, devenant la première femme à gagner deux fois et ramenant la couronne à la Suède 50 ans après qu'ABBA a remporté le concours. avec "Waterloo". Ils sont devenus l'un des plus grands groupes du canon de la musique pop.

3 façons éprouvées d'améliorer vos compétences en écriture

Les avantages de l'écriture et les stratégies pour vous aider à le faire

3 façons éprouvées d'améliorer vos compétences en écriture

En 2022, avec la sortie de GPT-3, la compétence en écriture semble devenir moins importante. Avec l'IA, les personnes ayant une mauvaise écriture peuvent également générer du personnel de qualité.

La persécution des chrétiens : le crime de haine dont nous ne parlons pas

Oubliez l'islamophobie : les chrétiens (et les juifs) sont les principales victimes des crimes de haine religieuse.

La persécution des chrétiens : le crime de haine dont nous ne parlons pas

Tout esprit rationnel sait que les milieux politiques et médiatiques sont dominés par la gauche, voire l'extrême gauche, un état de fait qui crée un déséquilibre dans le discours politique. Dans le domaine religieux, ce déséquilibre est bien visible : les journaux et les réseaux de gauche ne se précipitent pas pour défendre la foi chrétienne.

Journal ouvert

Journal ouvert

Journal ouvert : une image par jour. J'ai toujours été fasciné par les histoires.