Python'un Julia, JavaScript, Lua ve Diğer Dillerdeki “with as” İfadesi

Python'daki özelliği kavramamdaki zorluklardan biri with as, Python dilinin sınırlarını daha derinden anlamadıkça, ihtiyacı belirgin değil.

Örneğin bir Ruby, Julia, Lua, Go, JavaScript veya Swift geliştiricisi bu ifadenin eklenmesine ihtiyaç duymaz. Nedenmiş?

Sorunun merkezinde, birçok Python geliştiricisi tarafından sevilen bir özellik var: kod bloklarını belirtmek için girinti kullanımı.

JavaScript'te örneğin yazabilirim

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

Girintideki bir değişiklikten ziyade bir kod bloğunun sonunu işaret eden bir sembole sahip olmanın faydasını gösterir.

Kaynak Tahsisi ve Temizleme İçin Kapanışlarla Daha Yüksek Sıralı İşlevleri Kullanma

Satır içi çok satırlı kapatmalar için kolay bir sözdizimine sahip olmanın faydalarının ayrıntılarına biraz girelim. JavaScript, Lua ve diğer birçok dil aynı derecede iyi çalışsa da, bir Julia kodu örneği ile açıklayacağım.

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

Dosyaları açmanın ve kapatmanın bu yolunun güzelliği, dosyayı kapatmayı unutmayacak olmanızdır.

Python Çözümü

Açıklandığı gibi, Python'da sözdiziminde aynı şeyi elde etmek zor. Böylece with-asicat edildi. Önceki örneğin Python'da nasıl uygulanacağını göstereyim.

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)

Bir dosyayı şu şekilde açmak ve okumak için bu sınıfı kullanabiliriz:

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

  1. Önce openfilesınıfın yapıcısı çağrılır ve açmak istediğimiz dosyanın adını saklarız.
  2. Sınıfın bir örneği yapıya openfileiletilir , bu da yönteminin çağrılmasına neden olur. İstediğimiz kaynakları elde etmesi gerekiyor. Bu durumda bir dosya tanıtıcısı.with-as__enter__
  3. Döndürülen nesne argümanı olur as. Yani as filedöndürülen nesneyi ifade eder __enter__. İsimlerin eşleşmesi gerekmez. Onun as foobaryerine yazabilirdik.
  4. Blok içindeki tüm kod çalıştırıldığında, Python kaynakları serbest bırakmak için with-asçağırır . __exit__Bu, atılan herhangi bir istisna olması durumunda da çağrılır.

Bu bağlam yöneticisi sınıflarını, alt sınıflara ayırarak veya dekoratörleri kullanarak nasıl oluşturabileceğiniz konusunda birçok varyasyon vardır.

Suggested posts

Alan Adları Hakkında Bilgi Bulma

Brian P. Hogan'ın Küçük, Keskin Yazılım Araçları'ndan bir alıntı

Alan Adları Hakkında Bilgi Bulma

facebook.com'a bir talepte bulunduğunuzda, bilgisayarınız o bağlantıyı kurabilmesi için bu alan adını bir IP adresine çevirmek üzere alan adını arar.

UI Tasarımında D kelimesi ve L kelimesi. Dil Önemlidir. ırkçı olma

UI Tasarımında D kelimesi ve L kelimesi. Dil Önemlidir. ırkçı olma

Dilimiz, düşüncelerimizi, tutumlarımızı ve eylemlerimizi şekillendirebilen güçlü bir araçtır. Görünüşte zararsız terimler bile zararlı önyargıları ve klişeleri devam ettirebilir.

Related posts

Medyayı Yeniden Düşünmek: McChesney'nin Beş Gerçeği ve İletişimin Geleceği

Günümüzün hiper-bağlantılı dünyasında, medya sistemleri kamuoyunun şekillenmesinde ve dolayısıyla demokratik karar vermede çok önemli bir rol oynamaktadır. Bilgin Robert McChesney, iletişimin ekonomi politiğine ilişkin derinlemesine analizinde, geleneksel kanıya meydan okuyor ve medya hakkında kendi deyimiyle "beş gerçek" sunuyor.

Neden bazı serbest çalışanlar hayatlarını taklit ediyorlar?

Neden bazı serbest çalışanlar hayatlarını taklit ediyorlar?

Geçenlerde dünyanın en büyük profesyonel sosyal ağı olan Linkedin'deydim ve dikkatimi çeken, takip ettiğim serbest tasarımcıların gönderilerini buldum. Hepsi uçaklardan, dizüstü bilgisayarlarıyla sahilden, yüzme havuzlarından ve muhteşem manzaralı ofislerden fotoğraflar yayınladılar.

Sanat Hiç Apolitik midir?

Sanat Hiç Apolitik midir?

Dün, İsveçli şarkıcı Loreen'in kupayı evine götürdüğü, iki kez kazanan ilk kadın olduğu ve ABBA'nın yarışmayı kazanmasından 50 yıl sonra tacı İsveç'e geri getirdiği ışıltılı, kaotik bir büyük finalle bu yılki Eurovision Şarkı Yarışması'nın kapısını kapattık. "Waterloo" ile. Pop müzik kanonundaki en büyük oyunculardan biri olmaya devam ettiler.

Günlük Çıkışı

Günlük Çıkışı

Açık Günlük: Her Gün Bir Resim. Hikayeler her zaman ilgimi çekmiştir.