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.
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.
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))
openfilesınıfın yapıcısı çağrılır ve açmak istediğimiz dosyanın adını saklarız.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__as. Yani as filedöndürülen nesneyi ifade eder __enter__. İsimlerin eşleşmesi gerekmez. Onun as foobaryerine yazabilirdik.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.
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.
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.
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.
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.
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.