Bu bir Python yield anahtar kelimesi ile ilgilidir. yield, generator ve iterable ne olduğunu açıklar.
yield ne anlama geldiğini anlamak için, generator nedir anlamalısınız. Ve generator den iterable gelir.
Bir liste oluşturduğunuzda, öğelerini tek tek okuyabilir ve buna ardışıl işlem denir:
Python
Mylist ardışıl bir işlemdir. Liste içlemini kullandığınızda, bir liste oluşturur ve böylece ardışık sıralanabilir:
Python
for… in… için kullanabileceğiniz her şey ardışıl işlemdir: lists, strings, files…
Bu ardışıl işlenenler kullanışlıdır, çünkü onları istediğiniz kadar okuyabilirsiniz, ancak tüm değerleri hafızaya kaydedersiniz ve çok fazla değeriniz olduğunda istediğiniz her zaman olmaz.
Generators ardışıl işlemlerdir, ancak bunları yalnızca bir kez tekrarlayabilirsiniz. Tüm değerleri bellekte saklamamaları nedeniyle, değerleri anında oluştururlar:
Python
[] yerine () kullanmanız dışında tamamen aynıdır. AMA, generator sadece bir kez kullanabileceğinden for i in mygenerator‘yı ikinci kez gerçekleştiremezsiniz : 0’ı hesaplar, sonra unutur ve 1’i hesaplar ve 4’ü hesaplayarak sonlanır, teker teker.
Yield
Fonksiyonun bir generator döndürmesi dışında, yield, return gibi kullanılan bir anahtar kelimedir.
Python
İşte bu işe yaramaz bir örnek, ancak kullanışlıdır, fonksiyonunuzu bildiğiniz zaman, sadece bir kez okumanız gereken büyük bir değerler kümesi döndürecektir.
yield uzmanı olmak için, fonksiyon gövdesinde yazdığınız kodun çalışmadığını, fonksiyonu çağırdığınızda anlamanız gerekir. Fonksiyon sadece generator öbeğini döndürür, bu biraz aldatıcıdır.
Daha sonra kodunuzun çalıştırıldığı her seferinde for generator u kullanır.
Şimdi zor kısmı:
for ilk kez, fonksiyonunuzdan oluşturulan generator öbeğini çağırır, başlangıçtan yield‘ya ulaşana kadar, fonksiyoninizdeki kodu çalıştıracaktır, daha sonra çevrimin ilk değerini döndürür. Ardından, her bir çağrı, fonksiyonda yazdığınız çevrimi bir kez daha çalıştıracak ve geri dönüş değeri olmayana kadar bir sonraki değeri döndürecektir.
Fonksiyon çalıştığında generator boş olarak kabul edilir, ancak artık yield hedefe ulaşmaz. Döngü sonunda sona ermiş ya da artık “if / else” yerine getirmediğiniz için olabilir.
Kodunuz açıklandı:
Generator:
Python
Caller:
Python
Bu kod birkaç akıllı parça içerir:
Döngü bir listede yinelenir, ancak döngü yinelenirken liste genişler. Sonsuz bir döngü ile sonuçlanabildiğiniz için biraz tehlikeli olsa bile, tüm bu iç içe geçmiş verilerin üzerinden gitmenin kısa bir yoludur. Bu durumda, candidates.extend(node._get_child_candidates(distance, min_dist, max_dist)) jeneratörün tüm değerlerini tüketir, ancak aynı düğümde uygulanmadığı için öncekilerden farklı değerler üretecek yeni genarator nesneleri oluşturmaya devam eder.
extend() yordamı, yinelenebilir olmasını bekleyen ve değerlerini listeye ekleyen bir liste öbeği yordamıdır.
Genellikle bir listeyi geçiyoruz:
Python
Fakat kodunuzda bir generator var, bu da iyi çünkü:
Değerleri iki kere okumak zorunda değilsiniz.
Çok fazla child olabilir ve bunların hepsinin hafızada saklanmasını istemezsiniz.
Ve çalışır çünkü bir yordamın ifadesinin bir liste olup olmadığını Python umursamaz. Python ardışıl işlemleri bekler böylece dizeleri, listeler, tuples ve generator ile çalışacaktır! Bu, ördek tiplemesi olarak adlandırılır ve Python’un neden bu kadar havalı olmasının nedenlerinden biridir. Ama bu başka bir hikaye, başka bir soru için…
Burada durabilir veya gelişmiş bir generator kullanımını görmek için biraz okuyabilirsiniz:
Python
Bir kaynağa erişimi kontrol etmek gibi çeşitli şeyler için yararlı olabilir.
2 Generators
generator uygulanması çok kolaydır, ancak anlaması biraz zor.
Generators, ardışıl işlem oluşturmak için kullanılır, ancak farklı bir yaklaşımla. Generators, her seferinde özel olarak ardışık öğeler grubunu döndüren basit fonksiyonlardir.
Bir öğe kümesi üzerinde ardışıl işlem, for deyimini kullanmaya başladığında, generator çalıştırılır. generator fonksiyon kodu bir yield’ deyimine ulaştığında, generator, çalışmayı for döngüye geri göndererek, setten yeni bir değer döndürür. Generator fonksiyonu, istediği kadar çok değer(muhtemelen sonsuz) üreterek, her birinin sırayla üretilmesini sağlayabilir.
İşte, 7 rastgele tamsayı döndüren bir generator fonksiyonunun basit bir örneğidir:
Python
Bu fonksiyon rasgele sayıların kendi başına nasıl üretileceğine karar verir ve yield bildirimlerini tek tek yürütür, yürütme işlemini ana döngüye geri vermek için duraklar.
Talim
Fibonacci serisini döndüren bir generator fonksiyonu yazın. Aşağıdaki formül kullanılarak hesaplanırlar: Dizinin ilk iki sayısı her zaman 1’e eşittir ve her ardışık sayı son iki sayının toplamıdır. İpucu: generator fonksiyonunda sadece iki değişken kullanabilir misiniz? Atamaların aynı anda yapılabileceğini unutmayın. Kod;
Python
aynı anda a ve b değerlerini değiştirir.
Python
3 List İçlemi
List İçlemi, tek bir okunabilir satırda, başka bir listeye dayalı yeni bir liste oluşturan çok güçlü bir araçtır.
Örneğin, belirli bir cümlede her kelimenin uzunluğunu belirten tamsayıların bir listesini oluşturmamız gerektiğini, ancak yalnızca kelimenin the kelimesi olmaması gerektiğini varsayalım.
Python
Liste içlemini kullanarak, bu işlemi bu notasyona göre basitleştirebiliriz:
Talim
Liste içlemini kullanarak, tam sayı olarak listeden yalnızca pozitif sayıları içeren numbers listesinden newlist adlı yeni bir liste oluşturun.
Python
4 Çoklu Fonksiyon İçlem İfadeleri
Python’daki her fonksiyon, normal olarak bildirilirse, önceden tanımlanmış bir sayıda içlem alır:
Aşağıdaki sözdizimini kullanarak değişken sayıda içlem alan fonksiyonları bildirmek mümkündür:
Python
Ayrıca, aşağıdaki yazımları kullanarak içlemlerin sırasının önemi olmayacak şekilde fonksiyon içlemlerini anahtar kelimeye göre de göndermek mümkündür. Aşağıdaki kod aşağıdaki çıktıyı verir:
Python
bar fonksiyonu 3 içlem alır. Ek bir action içlemi alınırsa ve sayıların toplanması talimatını verirse, toplamı yazdırılır. Alternatif olarak, fonksiyon, aynı zamanda, number parametresinin değerinin, fonksiyona iletilmesi halinde first e eşit olması durumunda, ilk içlem değerini döndürmesi gerektiğini de bilir.
Talim
foo ve bar fonksiyonlarını doldurun, böylece değişken miktarda içlemi alabilirler (3 veya daha fazla). foo fonksiyonu, alınan ekstra içlem değerlerinin miktarını döndürmelidir. bar fonksiyonu, magicnumber anahtar kelimesi ile içlem 7 değerindeyse True ve aksi takdirde False değerini döndürmelidir.
Python
5 Düzenli Kurallı İfadeler
Normal İfadeler (bazen regex’e, regex’e veya re’ye kısaltılır) metindeki kalıpları eşleştirmek için kullanılan bir araçtır. Python’da, re modülümüz var. Düzenli ifadeler için uygulamalar geniş kapsamlıdır, ancak oldukça karmaşıktırlar, bu yüzden belirli bir görev için bir regex kullanmayı düşünürken, alternatifleri düşünün ve son çare olarak regex ifadelere gelin.
Bir örnek regex r”^(From
To
Cc).*?python-list@python.org”
Şimdi bir açıklama için: düzeltme işareti ^ bir satırın başında metni eşleştirir. Aşağıdaki grup, (From|To|Cc) kısmına sahip olan kısım, hattın boru | ile ayrılmış kelimelerden biriyle başlaması gerektiği anlamına gelir. Buna OR operatörü denir ve satır gruptaki sözcüklerden herhangi biriyle başlarsa normal ifadeler eşleşir.newline \n karakteri dışında, .*? herhangi bir sayıda karakterle açgözlülükle eşleşmesi anlamına gelir, Açgözlü olmayan bölüm, mümkün olduğunca az tekrarla eşleşmesi anlamına gelir. . karakter yeni olmayan herhangi bir karakter anlamına gelir. *, 0 veya daha fazla kez tekrarlamak için anlamına gelir, ve? karakter açgözlü yapar.
Yani, aşağıdaki satırlar bu regex ile eşleşir:
From: python-list@python.org To: !asp]<,. python-list@python.org
re yazımı için tam bir başvuru python belgelerinde mevcuttur.
proper e-posta eşleştirme regex örneği(egzersizdeki gibi)
Python
6 İstisna işleme
Programlama yaparken hatalar meydana gelir. Bu sadece bir yaşam gerçeğidir. Belki de kullanıcı kötü girdi verdi. Belki bir ağ kaynağı mevcut değildi. Belki de program belleği bitti. Ya da programcı bir hata yapmış olabilir!
Python’un hatalara çözümü özel bir durumdur. Daha önce kural dışı bir durum görmüş olabilirsiniz.
Hata! ‘a’ değişkenine değer atamayı unuttum.
Fakat programı tamamen durdurmak için bazen kural dışı özel bir durum istemezsiniz. Bir kural dışı durum oluştuğunda özel bir şey yapmak isteyebilirsiniz. Bu bir try/except bloğunda yapılır.
İşte önemsiz bir örnek: Bir liste üzerinde ardışıl sıralama yaptığınızı varsayalım. 8’den fazla sayıyı ardışıl sıralamanız gerekir, ancak liste kullanıcı girdisinden yapılır ve içinde 8 tane sayı olmayabilir. Listenin sonuna ulaştıktan sonra, geri kalan sayıların 0 olarak yorumlanmasını istiyorsunuz. İşte bunu nasıl yapabilirsin:
Python
Orada bu çok zor değildi! Bunu herhangi bir istisna ile yapabilirsiniz.
7 Sets
Setler, çift kayıt içermeyen listelerdir. Paragrafta kullanılan kelimelerin listesini toplamak istediğinizi varsayalım:
Python
my, name, is, Eric ve son olarak and içeren bir liste basar. Cümlenin geri kalanı halihazırda sette bulunan kelimeleri kullandığı için, ikinci kez eklenmez.
Setler, diğer setler arasındaki farkları ve kesişimleri hesaplama yeteneğine sahip olduklarından Python’da güçlü bir araçtır. Örneğin, A ve B etkinliklerinde katılımcı listeniz olduğunu varsayalım:
Python
Her iki etkinliğe hangi üyelerin katıldıklarını öğrenmek için intersection yordamını kullanabilirsiniz:
Python
Etkinliklerden yalnızca birine hangi üyelerin katıldıklarını öğrenmek için symmetric_difference yordamını kullanın:
Python
Hangi üyelerin yalnızca bir etkinliğe katıldığını ve diğerine katılmadığını öğrenmek için difference yordamını kullanın:
Python
Tüm katılımcıların listesini almak için union yordamını kullanın:
Python
Aşağıdaki alıştırmada, etkinlik B’ye katılmayan A olayından tüm katılımcıları içeren bir kümeyi yazdırmak için verilen listeleri kullanın.
Python
8 Serileştirme
Python, JSON’u kodlamak ve kodunu çözmek için yerleşik JSON kitaplıkları sağlar.
Python 2.5’de, simplejson modülü kullanılır, oysa Python 2.7’de json modülü kullanılır. Bu tercüman Python 2.7 kullandığı için json kullanıyor olacağız.
Json modülünü kullanabilmek için önce içeri aktarılmalıdır:
JSON verileri için iki temel biçim vardır. Bir dize veya nesne veri yapısında. Python’daki nesne veri yapısı, iç içe geçmiş listelerden ve sözlüklerden oluşur. Nesne veri yapısı, veri yapısından elemanları eklemek, listelemek, aramak ve çıkarmak için python yordamlarının (listeler ve sözlükler için) kullanılmasına izin verir. String formatı esas olarak verileri başka bir programa aktarmak veya bir veri yapısına yüklemek için kullanılır.
JSON’u bir veri yapısına geri yüklemek için loads yordamını kullanın. Bu yordam bir dize alır ve json nesne veri yapısına geri döndürür:
Bir veri yapısını JSON’a kodlamak için dumps yordamını kullanın. Bu yordam bir object nesne alır ve bir string dize döndürür:
Python
Python, pickle adı verilen tescilli bir Python veri serileştirme yordamını (ve cPickle olarak adlandırılan daha hızlı bir alternatif) destekler.
Tam olarak aynı şekilde kullanabilirsiniz.
Python
Bu alıştırmanın amacı, Me anahtar-değer çiftiyle JSON dizesini yazdırmaktır: 800 eklendi.
Python
9 Kısmi Fonksiyonlar
functools kütüphanesinden kısmi fonksiyonu kullanarak python’da kısmi fonksiyonlar oluşturabilirsiniz.
Kısmi fonksiyonlar, x parametresiyle bir fonksiyonu daha sınırlı fonksiyon için daha az parametre ve sabit değerler kümesi olan bir fonksiyone dönüştürmeyi sağlar
İçe aktarma gerekli:
Bu kod 8’e dönecek.
Python
Önemli bir not: varsayılan değerler, değişkenleri soldan değiştirmeye başlar. 2, x’in yerini alacak. dbl(4) çağrıldığında y, 4’e eşit olacak. Bu örnekte bir fark oluşmaz, ancak aşağıdaki örnekte yer almaktadır.
partial() öğesini çağırarak ve func() içindeki ilk üç değişkeni değiştirerek sağlanan fonksiyonu düzenleyin. Ardından, çıkışın 60’a eşit olması için sadece bir giriş değişkeni kullanarak yeni kısmi fonksiyonle yazdırın.
Bu kod 8’e dönecek.
Python
10 Kod İçgözlemi
Kod İçgözlemi, ne olduklarını, ne yaptıklarını ve ne bildiklerini bilmek için sınıfları, fonksiyonlari ve anahtar kelimeleri -classes, functions and keywords- tahlil etme yeteneğidir.
Python, kod içgözlemi için çeşitli fonksiyonlar ve yardımcı uygulamalar sunar.
Çoğu zaman en önemlisi yardım fonksiyonudur, çünkü diğer fonksiyonların ne yaptığını bulmak için kullanabilirsiniz.
Verilen Vehicle öbeğinin tüm öznitelliklerinin bir listesini yazdırın.
Python
11 Closures
Closures, bellekte bulunmasalar bile çevrelediği etki alanı ile ilgili değerleri hatırlayan bir fonksiyon öbeğidir. Hadi adım adım ulaşalım
İlk olarak, bir iç içe fonksiyon, başka bir fonksiyonun içinde tanımlanmış bir fonksiyondur. İç içe geçmiş fonksiyonların çevrelenen etki alanı değişkenlerine erişebildiğini unutmamak çok önemlidir. Bununla birlikte, en azından pythonda, sadece salt okunurlar. Ancak, bu değişkenleri değiştirmek için nonlocal anahtar kelimeyi açıkça bu değişkenlerle kullanabilirsiniz.
Örneğin:
Python
Bu data_transmitter fonksiyonu message erişebilir olduğu sürece iyi çalışır. nonlocal anahtar kelimenin kullanımını göstermek için şunu düşünün.
Python
nonlocal anahtar kelime olmadan, çıktı 3 9 olurdu, ancak nonlocal kullanımı ile 3 3 alırız, yani number değişkeni değiştirilir.
Python
Öbekler, ekli yordamlarla veridir, veri kapanları veriye eklenmiş fonksiyonlardır.
Python
Bir kapanma closure denir çünkü dış (sabit) değişken ‘üzerinden kapanır’. Bu sadece bir fonksiyon değil, fonksiyonun oluşturulduğu ortamın bir muhafazasıdır. Aşağıdaki örnekte, x’i değiştirdikten sonra g closure kapağını çağırmak, g içinde x’in değerini de değiştirecektir, çünkü g, x üzerinden kapanır:
Not: Python 3'e nonlocal eklendiğini, python 2.x'in tam okuma-yazma kapatmalarına sahip olmadığına dikkat edin (yani, değişkenler üzerinden kapatılmış olabilir, ancak değerlerini değiştiremezsiniz).
Şimdi, iç içe geçmiş fonksiyonu çağırmak yerine fonksiyon öbeği içinde nasıl döndürürüz? (fonksiyonların bile öbekler olduğunu unutmayın. (Python.))
Ve fonksiyonu şu şekilde çağırıyoruz:
Python
transmit_to_space() ifadesinin yürütülmesi tamamlanmış olsa da, message oldukça korunmuştur. Verilerin, diğer orijinal işlevlerin bitiminden sonra bile bir koda eklendiği bu teknik, python’da closure olarak adlandırılır.
Avantaj: Closure, global değişkenlerin kullanılmasını önleyebilir ve bir tür veri gizleme sağlar. (Örneğin. Bir sınıfta birkaç yordam olduğunda, bunun yerine closure kullanın).
Ayrıca, Python’daki süslü fonksiyonlar, closure kapatıcıların yaygın kullanımını sağlıyor.
Closure kapatıcıları kullanarak birden çok çarpım fonksiyonunu elde eden fonksiyonlar yapmak için iç içe bir döngü ve bir python closure kapatıcı yapın. Bu closure kapatıcıları kullanarak multiply_with_5() veya multiply_with_4() fonksiyonlarını oluşturan fonksiyonlar oluşturabilir.
Python
12 Python Dekoratörlerini Örneklerle Öğrenme
tarifi
Bir dekoratör, bir fonksiyonu, yordamı veya sınıf tanımını değiştirmek için kullanılan herhangi bir istenebilen Python öbeğidir. Bir dekoratör, tanımlanmış olan orijinal öbeği geçirir ve sonra değiştirilmiş bir öbeği döndürür; bu daha sonra tanımdaki isme bağlanır.
GoF’in Tasarım Desenleri bir dekoratörün amacını şöyle tanımlar:
Bir nesneye dinamik olarak ek sorumluluklar ekleyin. Dekoratörler, işlevselliği uzatarak alt sınıflamaya esnek bir alternatif sunar.
İki yaygın kullanım durumu, daha sonra ele alacağım web çerçevelerinde önbelleğe alma ve erişim denetimleridir.
ne zaman kullanılmalı?
Birden çok öbeğe ortak davranış eklemek istiyorsanız, dekoratörler kullanarak onu soyutlamayı düşünün. Kodunuzu daha çok DRY yapacak ve kapsülleyecek. Fonksiyonun ana hedefi ile doğrudan ilgili olmayan işlevselliği soyutlamanın güzel bir yoludur. Ekibiniz daha çok yeniden kullanılabilir kodunuz için teşekkür eder.
yazım kuralları
Python bir fonksiyonu (veya sınıfı) @ simgesiyle ve ardından dekoratörle süslemenizi sağlar.
Örneğin:
Bunun aynı olduğunu unutmayın:
Sözdizimsel şeker ‘@’ daha özlüdür ve okumak daha kolay olsa da.
Dekoratörler istiflenebilir ve içten dışarıya çalıştırılabilir:
Bu oldukça kafa karıştırıcı olabilir, bu yüzden SO üzerinde iyi bir örnek buldum:
Python
Dekoratör Temelleri
Python’un işlevleri nesnelerdir
Dekoratörleri anlamak için, ilk önce işlevlerin Python’daki nesneler olduğunu anlamanız gerekir. Bunun önemli sonuçları var. Neden basit bir örnekle görelim:
Python
Bunu aklında tut. Kısa bir süre sonra tekrar döneceğiz.
Python işlevlerinin bir başka ilginç özelliği, başka bir fonksiyonun içinde tanımlanabilmeleridir!
Python
Fonksiyon referansları
Tamam, hala burada mı? Şimdi eğlenceli bölüm …
Bu işlevlerin nesneler olduğunu gördünüz. Bu nedenle, işlevler
bir değişkene atanabilir
başka bir fonksiyonda tanımlanabilir
Yani bir fonksiyonun başka bir fonksiyona dönüşebileceği anlamına gelir.
Python
Fazlası var!
Bir fonksiyonu döndürebilirseniz, birini parametre olarak geçirebilirsiniz:
Eh, sadece dekoratörleri anlamak için gereken her şey var. Görüyorsunuz, dekoratörler wrappers dır, bu da fonksiyonlarını değiştirmeden dekore ettikleri fonksiyondan önce ve sonra kodu çalıştırmanıza izin verdikleri anlamına gelir.
hünerli dekoratörler
Manuel olarak nasıl yaptınız?
Python
Şimdi, muhtemelen “a_stand_alone_function” çağırdığınızda, “a_stand_alone_function_decorated” yerine çağrılır. Bu kolay, “my_shiny_new_decorator” tarafından döndürülen işlevle birlikte “a_stand_alone_function” üzerine yazmanız yeterli:
dekoratörlerin sırrını çözmek
Önceki örnek, dekoratör sözdizimini kullanarak:
Evet, hepsi bu kadar basit. @decorator sadece bir kısayol:
Dekoratörler, decorator design pattern ninin sadece pythonic bir çeşididir. Geliştirme kolaylaştırmak için (like iterators) Python’da gömülü birkaç klasik tasarım modeli vardır.
Tabii ki, dekoratörler biriktirebilirsiniz:
Python
Python dekoratör sözdizimini kullanarak:
Dekoratörleri belirlediğiniz sıra önemlidir:
Şimdi: soruya cevap vermek için …
Sonuç olarak, soruyu nasıl yanıtlayacağınızı kolayca görebilirsiniz:
Python
Artık mutlu olabilirsiniz ya da beyninizi biraz daha yakabilir ve dekoratörlerin gelişmiş kullanımlarını görebilirsiniz.
Dekoratörleri bir sonraki seviyeye taşıma
Dekoratör fonksiyonlara içlemleri geçirme
Python
Dekoratöre yordamlar
Python hakkında güzel bir şey, yöntemlerin ve fonksiyonların gerçekten aynı olmasıdır. Tek fark, yöntemlerin ilk argümanlarının mevcut nesneye (self) bir referans olduğunu beklemeleridir.
Yani aynı şekilde yordamlar için bir dekoratör oluşturabilirsiniz! Kendini göz önünde bulundurmayı unutma.
Python
Genel amaçlı bir dekoratör yapıyor iseniz - herhangi bir fonksiyona veya yordama başvurursanız, fonksiyon içlemleri ne olursa olsun- o zaman sadece *args, **kwargs kullan:
Python
fonksiyon içlemleri dekoratöre geçirme
Harika, şimdi argümanları dekoratörün kendisine aktarma hakkında ne söylerdin?
Bir dekoratör argüman olarak bir fonksiyonu kabul etmesi gerektiğinden, bu biraz bükülmüş olabilir. Bu nedenle, dekore edilmiş fonksiyonun argümanlarını doğrudan dekoratöre geçiremezsiniz.
Çözüme acele etmeden önce biraz hatırlatma yazalım:
Python
Tam olarak aynıdır. my_decorator çağrılır. Böylece, @my_decorator olduğunda, Python’a ‘değişken my_decorator tarafından etiketlenmiş’ fonksiyonunu çağırmasını söylüyorsunuz.
Bu önemli! Verdiğiniz etiket doğrudan dekoratöre işaret edebilir veya olmayabilir.
Python
Burada sürpriz yok.
Aynı şeyi tam olarak yapalım, ancak tüm sinir bozucu ara değişkenleri atlayın:
Python
Daha da kısaltalım:
Python
Hey, onu gördün mü? ‘@’ Sözdizimi ile bir fonksiyon çağrısı kullandık! :-)
Yani, fonksiyon içlemli dekoratörlere dönelim. Eğer dekoratörü anında üretmek için fonksiyonlar kullanabilirsek, fonksiyon içlemlerini bu fonksiyona iletebiliriz, değil mi?
Python
İşte: fonksiyon içlemleri ile bir dekoratör. fonksiyon içlemleri değişken olarak ayarlanabilir:
Python
Gördüğünüz gibi, bu hileyi kullanarak argümanları herhangi bir fonksiyon gibi dekoratöre aktarabilirsiniz. İsterseniz * args, ** kwargs kullanabilirsiniz. Ancak, dekoratörlerin sadece bir kez çağrıldığını unutmayın. Sadece Python, betiği içe aktardığında. Sonra argümanları dinamik olarak ayarlayamazsınız. “import x” yaptığınızda, fonksiyon zaten dekore edilmiştir, böylece hiçbir şeyi değiştiremezsiniz.
Pratik yapalım: decorating a decorator
Tamam, bir bonus olarak, herhangi bir dekoratörün herhangi bir bağımsız değişkeni kabul etmesi için size bir pasaj vereceğim. Sonuçta, argümanları kabul etmek için, başka bir fonksiyon kullanarak dekoratörü yarattık.
Dekoratörü sardık.
Son zamanlarda bu sarılmış fonksiyonu gördük başka bir şey?
Ah evet, dekoratörler!
Haydi biraz eğlenelim ve dekoratörler için bir dekoratör yazalım:
Aşağıdaki gibi kullanılabilir:
Python
Biliyorum, ‘özçağrıyı anlamadan önce, özçağrıyı anlamanız gerekir’ diyen bir adam dinledikten sonra en son bu duyguya sahiptiniz. Ama şimdi, bunu anlamak konusunda kendini iyi hissetmiyor musun?
En iyi uygulamalar: dekoratörler
Dekoratörler Python 2.4’te tanıtıldı, bu yüzden kodunuzun> = 2.4’te çalıştırılacağından emin olun.
Dekoratörler fonksiyon çağrısını yavaşlatır. Bunu aklında tut.
Bir fonksiyon süslenmişse süslülük özellğini kaldıramazsınız. (Kaldırılabilen dekoratörler yaratma yetileri vardır, ancak kimse bunları kullanmaz.) Böylece bir fonksiyon süslendiğinde, tüm kodlar için dekore edilmiştir.
Dekoratörler, hata ayıklamalarını zorlaştıracak işlevleri sarar. (Bu Python’dan daha iyi olur> = 2.5; aşağıya bakın.)

(Eğlenceli gerçek: functools.wraps() bir dekoratör!)
Python
Dekoratörler nasıl yararlı olabilir?
Şimdi büyük soru: Dekoratörleri ne için kullanabilirim?
Güzel ve güçlü görünüyorsun, ama pratik bir örnek harika olurdu. Eh, 1000 olasılık var. Klasik kullanımlar, harici(değiştiremezsin) bir kütüphaneden veya hata ayıklamadan(bunu geçici olarak değiştirmek istemezsiniz) bir fonksiyon davranışını genişletmektedir.
Bir DRY’nın içinde çeşitli işlevleri genişletmek için bunları kullanabilirsiniz:
Python
Tabii ki dekoratörler ile iyi olan şey, onları hemen hemen her şeyi yeniden yazmadan kullanabilmenizdir. DRY dedim:
Python’un kendisi birkaç dekoratörler sunar: property, staticmethod, vb.
Django, önbelleğe alma ve görüntüleme izinlerini yönetmek için dekoratörler kullanır.
Eşzamanlı olmayan fonksiyon çağrıları yapmak.
Bu gerçekten büyük bir oyun alanı.
13 Python İstisnası İşleme: Öğrenme İçin Hızlı Bir Kılavuz
Python istisna işlemeyi öğrenmek için bu öğreticiyi okuyun. Python istisna işlemeyi öğrenmek için bu öğreticiyi okuyun. Programlarınızda try, except ve son ifadeleri nasıl kullanacağınızı anlamanıza yardımcı olmalıdır. Hemen başlamak için verilen örnekleri gözden geçirin.
İstisna yönetimi, sağlam ve kararlı uygulamalar oluşturmak için çok önemlidir. Programcıları temiz, okunabilir ve hatasız bir kod yazmaya teşvik eder.
Kodun en iyisinin bile çalışma zamanında beklenmedik şekilde davranabileceğini kabul edersiniz. Eksik bir konfigürasyon veya yürütme ortamında bir değişiklik nedeniyle veya kullanıcı yanlış girdiyle başlamış olabilir.
Bu hatalardan bazıları programın aniden sonlandırılmasına neden olabilir. Python istisnasının ele alınmasıyla, yukarıdaki sorunları yönetebilir ve kodumuzun aralıklı hatalarını önleyebiliriz.
Her şeyden önce, bir hata ve istisna arasındaki farkı anlamalıyız. Sonuç olarak, size Python istisna işleminin esaslarını öğreteceğiz.
Python İstisna İşleme: Hata Vs. İstisna
Hata Nedir?
Hata, programda yanlış giden, örneğin sözdizimsel bir hata gibi bir şeydir.
Derleme zamanında gerçekleşir. Bir örnek görelim.
İstisna Nedir?
Hatalar çalışma zamanında da ortaya çıkar ve bunları istisna olarak biliriz. Bir istisna, bir programın yürütülmesi sırasında gerçekleşen ve programın talimatlarının normal akışını bozan bir olaydır.
Genel olarak, bir Python betiği, başa çıkamayacağı bir hata durumuyla karşılaştığında, bir istisna ortaya çıkarır.
Bir Python betiği bir istisna oluşturduğunda, bir istisna nesnesi oluşturur.
Genellikle, betik hemen istisnayı ele alır. Eğer böyle olmazsa, o zaman program, nerede olduğu ile birlikte hatanın bir izini sonlandıracak ve yazdıracaktır.
Try-Except İle İstisnalar Nasıl Kullanılır?
Try-Except deyimi nedir?
Python programlarında istisna işlemlerini sağlamak için try-except ifadesini kullanırız.
Try bloğunun içinde, bir istisna oluşturabilecek kodu yazarsınız.
Ve istisnaları ele geçiren veya yakalayan kod, istisna dışı maddeye koyarız.
Python İstisnası İşleme Sözdizimi
Aşağıda, bir Python try-except-else bloğunun sözdizimi verilmiştir.
İşte Python try ifadesini etkili bir şekilde kullanmak için bir kontrol listesi.
Tek bir deneme ifadesi, gereksinime bağlı olarak birden çok istisna ifadesine sahip olabilir. Bu durumda, bir try bloğu farklı türde istisnalar atabilecek ifadeler içerir.
Tüm olası istisnai durumları ele alabilen genel bir istisna maddesi de ekleyebiliriz.
İstisnai maddeden sonra bir başka maddeyi bile ekleyebiliriz. Try bloğundaki kod bir istisna oluşturmuyorsa, diğer bloktaki talimatlar yürütülür.
Python İstisna İşleme Örnekleri
Python try-except kullanımını anlamak için örnek bir kod alalım.
Yukarıdaki kod aşağıdaki çıktıyı üretir.
READ modunda bir dosya açmaya çalıştığımız başka bir örnek verelim.
Üzerinde bir WRITE işlemi yapacağız. Uygulama üzerine, bir istisna atar.
Yukarıdaki kod aşağıdaki çıktıyı üretir.
İstisnai Her Türlü İstisnaları İşleme
Çıplak bir “istisna” maddesi kullanırsak, her türlü istisnaları yakalardı.
Bununla birlikte, ne iyi bir programlama pratiği ne de başka biri bunu önermiyor.
Böyle bir Python try-except bloğunun her tür istisnayı ele alabilmesidir. Ancak, programcının istisnaya neden olan sorunu bulmasına yardımcı olmaz.
Tüm istisnaları nasıl yakalayacağınızı görmek için aşağıdaki kodu inceleyebilirsiniz.
İstisna İle Birden Çok Özel Durumun Kullanılması
Aynı istisna dışında, birden fazla istisna tanımlayabiliriz. Bu, Python yorumlayıcısının eşleşen bir istisna bulması durumunda, istisnai şartlar altında yazılan kodun çalıştırılacağı anlamına gelir.
Kısaca, fıkra hariç bu şekilde tanımladığımızda, aynı kod parçasının farklı istisnalar atmasını bekliyoruz. Ayrıca, her durumda aynı eylemi almak istiyoruz.
Lütfen aşağıdaki örneğe bakınız.
Try-Finally ile İstisnalar Nasıl Ele Geçirilir?
Try-Finally Bildirimi Nedir?
Ayrıca Python istisna işlemlerini try-finally ifadesinin yardımıyla etkinleştirebiliriz.
Try bloğu ile, “finally” bloğunu tanımlama seçeneğine de sahibiz. Bu fıkra, yürütmek istediğimiz ifadeleri tanımlamaya izin verir, ancak try bloğunun bir istisna oluşturup oluşturmadığı önemli değildir.
Bu özellik genellikle dış kaynak sağlarken resim içinde gelir.
İşte burada yardım için kodlama snippet’i.
Examples
Bir kritik nokta, her bir try bloğu ile ya bir “except” ya da “finally” cümlesi tanımlayabilmemizdir. Bunları birlikte kullanamazsın. Ayrıca, “else” maddesini “finally” cümlesiyle birlikte kullanmamalısınız.
Daha fazla netlik elde etmek için bir örnek verelim.
İstisna oluşmazsa, aşağıdaki çıktıyı görürsünüz.
Python
Dosyayı (READ) modunda açtığımızı ve üzerinde bir yazma işlemi yapmaya çalıştığımızı varsayalım. Böyle bir durumda, aşağıdaki kod istisnayı ele almaya yardımcı olacaktır.
Bu durumda, interpreter bir istisna oluşturacak ve aşağıdaki çıktı gösterilecektir.
Python
Bir kod, bir try bloğunda bir istisna oluşturduğunda, yürütme hemen “finally” bloğuna geçer. “finally” bloğundaki tüm ifadeler çalıştırıldıktan sonra istisna, yürütme için “except” bloğuna devam eder. Fakat “try-except” ifadesinin bir sonraki yüksek tabakasını sunmalıdır.
Argümanlar ile İstisnaya Yükseltme
raise nedir
raise anahtar kelimesini kullanarak bir istisna oluşturabiliriz.
Ayrıca isteğe bağlı olarak değerleri istisna geçirebilir ve neden oluştuğunu belirtebiliriz.
raise sözdizimini
Nerede,
“Exception” altında - adını belirtin.
“args” isteğe bağlıdır ve istisna argümanının değerini temsil eder.
Son argüman olan “traceback” de isteğe bağlıdır ve eğer varsa, istisna için kullanılan traceback nesnesidir.
Bunu açıklığa kavuşturmak için bir örnek verelim.
Raise Örneği
Python
Python’da Özel İstisnalar Yaratın
Özel İstisna Nedir?
Özel bir istisna, programcının kendini yarattığı bir istisnadır.
Yeni bir sınıf ekleyerek yapar. Buradaki hile, özel istisna sınıfını temel istisna sınıfından türetmektir.
Yerleşik istisnaların çoğunun da denk düşen bir sınıfı vardır.
Python’da İstisna Sınıfı Oluşturun
Python
Yukarıdaki ufak kod parçasında, kullanıcı tanımlı bir istisna sınıfı oluşturduğumuzu görebilirsiniz, “UserDefinedError.” Bu, ana Exception sınıfını üst olarak kullanıyor. Bu nedenle, kullanıcı tanımlı yeni istisna sınıfı, diğer istisna sınıflarının yaptığı gibi istisnalar oluşturacaktır, yani isteğe bağlı bir hata mesajıyla “raise” ifadesini çağırarak.
Bir örnek alalım.
Misal
Bu örnekte, bir programda kullanıcı tanımlı bir istisnayı ve yakalama hatalarını nasıl yükselteceğimizi göstereceğiz.
Bu program, kullanıcının yalnızca kayıtlı alfabeyi girene kadar tekrar tekrar bir alfabe girmesini ister.
Yardım için, program kullanıcıya doğru bir ipucu verir, böylece doğru alfabeyi bulabilir. Ayrıca, tahminin kayıtlı alfabeden daha yüksek veya daha az olup olmadığını kontrol edebilir.
Bu programı farklı girişler sağlayarak test edelim.
Python
Böylece, bu programda Error olarak adlandırılan bir taban sınıfını tanımladığımızı görebilirsiniz. Temel sınıftan türetilen iki istisna (“InputTooSmallError” ve “InputTooLargeError”) kaldırır. Python programlamasında kullanıcı tanımlı istisnaları tanımlamanın standart yolu.
Python Yerleşik İstisnaları
istisna
Hata Nedeni
AirthmeticError
Sayısal hesaplamadaki hatalar içindir.
AssertionError
Eğer assert ifadesi başarısız olursa.
AttributeError
Bir özellik ataması veya referans başarısız olduğunda.
EOFError
Giriş yoksa veya dosya tanıtıcısı EOF’de.
Exception
Tüm istisnalar için temel sınıftır.
EnvironmentError
Python ortamının dışında oluşan hatalar için.
FloatingPointError
Kayan nokta işlemi başarısız olduğunda oluşur.
GeneratorExit
Bir generator <close()> method yordamı çağrılırsa.
ImportError
İçe aktarılan modül mevcut olmadığında oluşur.
IOError
Bir giriş / çıkış işlemi başarısız olursa.
IndexError
Bir dizinin indeksi aralık dışında olduğunda.
KeyError
Belirtilen anahtar sözlüğünde mevcut değilse.
KeyboardInterrupt
Kullanıcı bir interrupt tuşuna bastığında (Ctrl + c veya delete).
MemoryError
Bir işlem hafıza dışına taşarsa.
NameError
Bir değişken yerel veya global kapsamda mevcut olmadığında.
NotImplementedError
Soyut bir yordam mevcut değilse.
OSError
Bir sistem işlemi başarısız olduğunda.
OverflowError
Bir aritmetik işlemin sonucu değer aralığını aşarsa oluşur.
ReferenceError
Zayıf referans proxy’si, toplanan bir çöp referansına eriştiğinde.
RuntimeError
Oluşturulan hata herhangi bir kategoriye girmiyorsa.
StandardError
ve hariç tüm yerleşik istisnalar için bir temel sınıftır.
StopIteration
<next()> işlevinin iade edilmek üzere başka bir öğesi yoktur.
SyntaxError
Python sözdizimindeki hatalar için.
IndentationError
Girinti uygun değilse oluşur.
TabError
Tutarsız sekmeler ve boşluklar için.
SystemError
Tercüman bir iç hata algıladığında.
SystemExit
<sys.exit()> fonksiyonu onu yükseltir.
TypeError
Bir fonksiyon yanlış türde bir nesne kullanıyorsa.
UnboundLocalError
Tercüman bir iç hata algıladığında.
UnicodeError
Unicode kodlama veya kod çözme hatası için.
ValueError
Bir fonksiyon geçersiz değerler aldığında.
ZeroDivisionError
İkinci bölünme operandı veya modulo işlemi sıfırdır.
Python
Özet - Python İstisnası İşleme Kavramları
Çoğu zaman, okuyucularımıza işlerinde yardımcı olabilecek bir konu keşfetmeyi amaçlıyoruz. Bu yüzden bu eğitimi Python Kural Dışı Durum Tespitinde ele aldık.
Bu gönderi, Python’un temel bir kavramını öğrenmede size yardımcı olsaydı sizden haber almak harika olurdu. Deneyiminiz hakkında bize bilgi verin.
Python’da Kalıtım
Kalıtım, soyutlama, kapsülleme ve çokbiçimlilik OOP (Object Oriented Programming) tarafından sağlanan dört temel kavramdır. Kalıtım, programcıların yeni bir sınıfa izin vermelerini sağlayan OOP’un güçlü bir özelliğidir- veya mevcut sınıf/sınıfların tüm özelliklerini ve yordamlarını kalıtımla kazanır. Hepimizin bildiği gibi, bu sınıf; bir öbeğin ayrıntılı bir tasarısı veya şablonudur. Her öbek bir sınıftan inşa edilmiştir ve ‘kalıtım’ kavramı bu ayrıntılı tasarılar arasında bir ilişki oluşturmak için kullanılır.
Var olan bir sınıfa çok az veya hiç değişiklik yapmadan yeni bir sınıf tanımlamak için kullanılan nesne yönelimli programlamanın bir özelliğidir. Yeni sınıf, türetilmiş sınıf veya alt sınıf olarak adlandırılır ve bu türetilmiş sınıfın miras aldığı sınıf temel sınıf veya üst sınıftır. Türetilmiş sınıf, temel sınıftan oluşur ve ek olarak bazı ek özellikler içerebilir. Bu miras kavramı, kodun yeniden kullanılmasına yardımcı olur.
Yukarıdaki diyagramda, türetilmiş sınıfın özellikleri ile birlikte türetilmiş sınıfta temel sınıfın özellikleri de bulunmaktadır. Bu temel sınıf özelliklerine, kalıtım kavramı nedeniyle sınıf elde etmek için erişilebilir.
Programcılar bu tip nesne yönelimli kavramları kullandıklarında ve kodları yeniden kullandıklarında, üst ve alt sınıfının birbiriyle etkileşimde bulunabilmesinin üç yolu vardır. Bunlar:
Alt sınıfında yapılan herhangi bir şey, sadece ana sınıftaki bir eylemdir.
Alt sınıfı üzerinde gerçekleştirilen işlemler, üst sınıfında gerçekleştirilen eylemleri geçersiz kılar.
Alt sınıfında yapılan herhangi bir şey, üst sınıftaki eylemi değiştirir.
Python
Yukarıdaki durumda, türetilmiş sınıfın öbeği oluşturulur ve bir nokta (.) operatörü kullanılarak türetilmiş sınıfın yanı sıra temel sınıfın işlevlerinin her ikisini de çağırmak için kullanılır.
interpreter, nesnesi tanımlanmış olan sınıfta (türetilmiş) bulunmadığında, o zaman temel sınıftaki bu öznitelliği kontrol etmeye devam eder. Bu süreç, temel sınıfın kendisi başka bir sınıftan türetilmişse, bir özyineleme devam eder.
Python Kalıtımında örtük eylemler oluşur. Python Kalıtımında bir programcı, üstte bir fonksiyonu tanımlar ancak altta tanımlamaz. Bu tür kalıtım aşağıda basit bir örnekle gösterilmektedir:
Python
Yukarıdaki kodda, temel sınıfın hem nesneler hem de türetilmiş sınıfları, temel sınıfın fonksiyonunu çağırabilir. Ayrıca, ‘alt’ sınıfı altındaki ‘pasif’ ifadesi, Python’a programcının ‘alt’ sınıfı altında yaratılan boş bir blok istediğini söylemek için kullanılır, ancak içinde tanımlanacak yeni bir şey olmadığını söyler.
Yukarıdaki program ayrıca şunu gösterir: - eğer temel sınıfta (burada ‘super’’) herhangi bir fonksiyon koyarsak, o zaman tüm türetilmiş sınıflar (burada sınıf ‘sub’) ayrıca özellikleri temel sınıftan otomatik olarak alacaktır. yani, tüm davranışı ana sınıftan devralır.
14 Python Düzenli ifadeler
Python Düzenli ifadeler
Düzenli ifadeler, kod, elektronik tablolar, belgeler veya günlük dosyaları gibi metinden bilgi almak için çok kullanışlı bir tekniktir. Düzenli ifadeyi uygularken akılda tutulması gereken ilk şey, her şeyin esas olarak bir karakter olması ve programcıların belirli bir karakter dizisi / dizgisiyle eşleşmesi için desen yazmalarıdır.
Düzenli İfadeyi Tanımlama
Düzenli ifadeler, programcıların bir desende tutulan özel sözdizimini kullanarak diğer karakter veya dizge dizileri veya dizeler kümesi bulmalarına yardımcı olan özel sıradaki karakterlerdir. Python, her Python yüklemesiyle dolu olan standart Python kitaplığı aracılığıyla düzenli ifadeleri destekler.
Python’daki Raw Dizeler
Düzenli dizgiler yerine ham dizelerin kullanılması önerilir. Programcılar Python’da düzenli ifadeler yazdıklarında, dizgede özel bir önek ‘r’ ve ters eğik çizgi ve özel meta-karakterler ile ham dizgileri başlatırlar, bu da onları doğrudan düzenli ifade motoruyla geçirmemizi sağlar.
Burada tüm parçalar aşağıda açıklanmıştır:
match(): bir yordamdır
pattern: Bu, hangi dizelerin eşleştirilebileceğini tanımlamak için meta-karakterler kullanan normal ifadedir.
string: dizgenin başlatılmasında deseni aramak ve eşleştirmek için kullanılır.
flags: Programcılar bitsel operatörü kullanarak farklı bayrakları belirleyebilir ‘
’ (OR)
re.search fonksiyonu başarıda bir eşleme match öbeğini, başarısızlık durumunda none değerini döndürür. Eşleşen ifadeyi almak için group(num) ve groups() eşleştirme nesnesini kullanırız.
Eşleştirme Öbek Yordamları ve Tanımlaması:
group(num=0): Bu yordam tüm eşleşmeyi (veya belirli alt grup no) döndürür
groups(): Bu yordam, bir tuple(değişken grubunda) eşleşen tüm alt grupları döndürür
Python Flags
Birçok Python Regex Metodu ve Regex işlevi, Flags olarak adlandırılan isteğe bağlı bir argümanı alır. Bu bayraklar, verilen Regex modelinin anlamını değiştirebilir. Bunları anlamak için bu Bayrakların bir veya iki örneğini göreceğiz.
[ Regex flags için Sözdizimi ]
Bu bayrak ne yapar
[re.M]
Başlangıç/bitiş her satırı dikkate al
[re.I]
Durumu görmezden geliyor
[re.S]
[.] Yapmak
[re.U]
{ \w,\W,\b,\B} Unicode kurallarını takip eder
[re.L]
{\w,\W,\b,\B} yerel ayarları takip eder
[re.X]
Regex’te yoruma izin verir
match Fonksiyonu
Bu yordam, düzenli ifadenin Python’daki belirli bir dizeyle eşleşip eşleşmediğini test etmek için kullanılır. The re.match(). Fonksiyon, desenin ‘none’ değerini döndürmez veya eşleşmenin bulunduğu dizenin bir kısmı hakkında ek bilgi içermez.
Eşleme işlevi, RE desenini isteğe bağlı bayraklarla dizeye eşleştirmek için kullanılır. Bu yöntemde “w+” ve “\W” ifadesi ‘g’ harfi ile başlayan kelimelerle eşleşecek ve bundan sonra ‘g’ ile başlatılmayan bir şey tanımlanmayacaktır. Listedeki veya dizideki her elemanın eşleşmesini kontrol etmek için, forloop’u çalıştırıyoruz.
re.match kullanan bir program :
Python
Yukarıdaki örnekte, kalıp hangi dizeleri eşleştirebileceğini tanımlamak için meta-karakter kullanır. Burada ‘\w’, kelime karakteri & + (plus) sembolü, bir veya daha fazla anlamına gelir.
Düzenli ifadelerin çoğu kontrol tekniği, ‘desenler’ kullanıldığında rol alır.
search Fonksiyonu
Bir eşlemeden farklı bir şekilde çalışır. Her ikisi de desen kullanıyor olsa da; fakat ‘search’ bunu dizideki tüm olası başlangıç noktalarında dener. Giriş dizesi boyunca tarar ve herhangi bir yerde eşleşmeye çalışır.
Bu fonksiyon, isteğe bağlı bayraklarla dizgede RE modelinin ilk oluşumunu arar.
Programın nasıl kullanıldığını göstermesi:
Python
split Fonksiyonu
re.split(), sonlayıcı belirten bir deseni kabul eder. Bunu kullanarak, desen ve ayrı metin verilerini eşleştirebiliriz. split(), doğrudan düzenli ifade olmayan bir dizede ve işleyici de kullanılabilir.
split() nasıl kullanılacağını gösteren program:
Python
Yukarıdaki programda, \D+ bir veya daha fazla rakam olmayan karakteri temsil eder.
findall Fonksiyonu
Re.findall() modülü, dosyanın satırları üzerinde yinelemek istediğinizde kullanılır, tüm eşleşmelerin listesini tek bir adımda döndürür. Örneğin, burada bir e-posta adresleri listesi var ve tüm e-posta adreslerinin listeden çıkarılmasını istiyoruz, re.findall yordamını kullanıyoruz. Tüm e-posta adreslerini listeden bulabilirsiniz.
Python
sub Fonksiyonu
Bir kalıbı araştırmaya ve yeni bir alt dizeyle değiştirmeye yardımcı olur. Desen bulunamazsa, dize değişmeden döndürülür.
re.sub(pattern, repl, string):
Python
compile Fonksiyonu
Düzenli bir ifade desenini, desen eşleştirmesi için kullanılabilen desen nesnelerine birleştirebiliriz. Ayrıca yeniden yazmadan bir modelin tekrar aranmasına yardımcı olur.
Python
15 Python Çoklu Parçacıklı Programlama
Python Çoklu Parçacıklı Programlama
Programcılar basit bir Python programını çalıştırdıklarında, yürütme ilk satırda başlar ve satır-by-line ilerler. Ayrıca, işlevler ve döngüler, program yürütme işleminin atlanmasının nedeni olabilir, ancak çalışma prosedürlerini görmenin nispeten kolaydır ve hangi satır daha sonra gerçekleştirilecektir. Programcılar parmaklarını koyabilir ve icra edilecek kod satırlarını izleyebilirler; Bu tek iş parçacıklı programlama denir.
Ancak, çok iş parçacıklı programlama durumunda, programınıza ikinci bir parmağınızı koymak gibi. Her iki parmak da aynı şekilde hareket eder ve aynı anda yürütülür.
En Küçük Yürütme Birimi Nelerdir?
Bağımsız olarak yönetilebilen ve işletim sisteminin ayırt edici bir parçası olan küçük bir program talimat dizisinin yürütülmesidir. Modern işletim sistemi, bir zaman paylaşımı tekniği kullanarak çoklu programları yönetir. Python’da iki farklı tür küçük yürütme birimi vardır. Bunlar:
Kernel Küçük Yürütme Birimleri
User-space or User küçük yürütme birimleri
En Küçük Yürütme Birimi Neden Kullanılır?
Uygulama programlamada en küçük yürütme birimi önemli bir rol oynar. Tüm GUI programları ve web sunucuları birlikte işlenir. Küçük Yürütme Birimi kullanmanın başlıca nedenleri şunlardır:
Paralel Hesaplama: Eğer herhangi bir kullanıcı çok işlemcili makineye sahipse, en küçük yürütme birimi işlem hızındaki artış hedefi ile paralel işlem yapılmasına izin verebilir.
Standardizasyon: Programlama hızını artırdığı için tüm programlama dilleri için standart bir yaklaşım haline gelmiştir.
Paralel I/O (Giriş/Çıkış): Giriş ve çıkış hızı hakkında konuştuğumuzda, CPU’da nispeten yavaştır. Her i/o işlemlerini birden fazla birbirinden ayrı küçük yürütme birimine yerleştirerek, programcılar birbirleriyle ve hesaplama hızıyla paralel olarak gerçekleştirilen işlemleri kullanabilirler.
Eşzamansız Olaylar: Birden çok iş parçacıklı uygulama, eşzamansız eylemlerle ilgilenebilir. Örneğin, bir programda, programcılar, bir sonraki harekatın fareyi kullanmak mı yoksa klavyeyi mi kullanacağını bilmiyor olabilirler. Her bir eylem için ayrı bir küçük yürütme birimi ekleyerek, yani hem fare hem de klavye için iki küçük yürütme birimi, programlayıcılar bloke edici olmayan I/O işlemlerini kullanmak için daha temiz ve verimli bir uygulama kodlayabilir.
Python En Küçük Yürütme Birimi Modülleri
Python iş parçacığına erişmenin iki yolu vardır. Bunlar kullanarak:
py module
‘tread’ modülünün daha az kullanıldığından ve dolayısıyla da kullanıcıların ‘threading’ modülünü kullanmaya başladıkları dikkate alınmalıdır.
Threading Faydaları
Tek bir işlem için, aynı veri alanını işlemek ve paylaşmak için birden fazla en küçük yürütme birimi kullanılabilir ve bilgi paylaşarak birbirleriyle iletişim kurabilir.
Daha az bellek yükü kullanırlar ve dolayısıyla hafif işlem olarak adlandırılırlar.
Bir en küçük yürütme birimi kullanıldığında, bir program girişe duyarlı kalabilir.
Küçük yürütme birimleri global değişkenin belleğini paylaşabilir ve işleyebilir.
Bir iş parçacığında, üç farklı bölüm vardır. Başlangıç, bir yürütme parçası ve bir sonuca sahiptir. Ayrıca, küçük yürütme biriminin veya işlemin şu anda çalıştığını gösteren bir yönlendirme işaretçisi vardır ve bu nedenle en küçük yürütme birimi aynı anda birkaç program bloğunu çalıştırabilir.
Yeni Küçük Bir Yürütme Birimi Kullanmak
Bir Thread modül kullanılarak ayrı bir küçük yürütme biriminde işlevler yürütmek için gerçekleştirilebilir. Bunu yapmak için programcılar - küçük yürütme birimi.start_new_thread() işlevi kullanabilir.
Burada, ilk kısım daha önce anlatıldığı gibi bir yöntemdir ve bu yöntem yeni iş parçacıkları oluşturmanın daha hızlı ve daha etkili bir yoludur. Alt en küçük yürütme birimi başlatıldığında işlev, bir args listesi geçirir. İşlevi bir değer döndürdüğünde en küçük yürütme birimi sonlandırılır. Yukarıdaki sözdizimindeki ‘args’ argümanlar dizisidir.
Python Kullanan Threading Programı
Python
Threading Sınıf Yordamı
Daha önce açıklandığı gibi, threading modülü, küçük yürütme birimini uygulamak için kullanılan bir threading sınıfına sahiptir ve bu sınıf ayrıca, programcılar tarafından multi-threaded programlamada kullanılan bazı öntanımlı yordamlar içerir. Bunlar:
run(): Bu küçük yürütme biriminin girdisi olarak davranır
start(): run() yordamını çağırarak en küçük bir yürütme birimi başlatmak için kullanılır
isAlive(): hala çalışıp çalışmadığını doğrulamak için kullanılır
getName(): bir küçük yürütme biriminin adını döndürmek için kullanılır
setName(): küçük yürütme biriminin adını ayarlamak için kullanılır
Python’da Python 2’deki küçük yürütme birimi modülünü veya Python 3’teki _thread modülünü kullanarak küçük bir yürütme birimi oluşturabilirsiniz. Threading modülünü etkileşimde bulunmak için kullanacağız.
Bir küçük yürütme birimi olan küçük yürütme birimi, normal bir işlemden farklı özelliklere sahip bir işletim sistemi işlemidir:
en küçük yürütme birimi bir işlemin bir alt kümesi olarak vardır
en küçük yürütme birimi bellek ve kaynakları paylaşır
işlemler farklı bir adres alanına sahiptir (bellekte)
Ne zaman threading kullanırsınız? Genellikle bir fonksiyonun programınızla aynı anda gerçekleşmesini istersiniz. Sunucu yazılımı oluşturursanız, sunucunun yalnızca bir bağlantıyı değil, aynı zamanda birçok bağlantıyı dinlemesini de istersiniz. Kısacası, küçük yürütme birimi’ler, programların aynı anda birden çok görevi yürütmesini sağlar.
Python threading
Bir küçük yürütme birimi programı oluşturalım. Bu programda, her birinin id kimliğini çıkaracak 10 küçük yürütme birimini başlatacağız.
Python
Bir kez çalıştırırsanız, küçük yürütme birimlerinin durması gerekmez.
Küçük yürütme birimleri, her x saniyede yinelenen küçük yürütme birimlerinin işlevselliğini zamanlamış olabilir
Zamanlanmış küçük yürütme birimleri
Python’da, Timer sınıfı Thread sınıfının bir alt sınıfıdır. Bu benzer davranır anlamına gelir. Zamanlanmış küçük yürütme birimleri oluşturmak için timer sınıfını kullanabiliriz. Zamanlayıcılar, normal küçük yürütme birimleri gibi .start() yordam çağrısı ile başlatılır. Aşağıdaki program 5 saniye sonra başlayan bir küçük yürütme birimi oluşturur.
Python
Küçük yürütme birimleri kullanarak yinelenen işlevsellik
İşlenmemiş küçük yürütme birimlerini aşağıdaki gibi yürütebiliriz:
Python
Aşağıdaki örnek, join() yöordamının kullanımını gösterir.
Bu çalışıyor! Ama sırayla çalışır. self.start()‘yı __init__‘ye koyabilirim, ama self.join()‘yi değil. Her küçük yürütme birimi başladıktan sonra yapılması gerekenler.
join(), küçük yürütme biriminizin bitmesini bekleyen ana küçük yürütme birimidir. Aksi halde, küçük yürütme biriminiz kendi başına çalışır.
Dolayısıyla, join() ana yürütme birimi üzerinde ‘dur-bekle’ olarak düşünmenin bir yolu, join() çağrıldığında ana yürütme birimi hemen serbest bırakılır.
t1.join() ana yürütme birimini tutuyor.
Bu nedenle, herhangi bir değişiklik görmemenizin nedeni, ana yürütme biriminizin join()‘nızdan sonra hiçbir şey yapmamasıdır. join()‘nın (sadece) ana yürütme biriminin yürütme akışıyla ilgili olduğunu söyleyebilirdiniz.
Örneğin, bir grup sayfayı aynı anda tek bir büyük sayfada birleştirmek için indirmek isterseniz, küçük yürütme birimi kullanarak eşzamanlı yüklemeler başlatabilirsiniz, ancak son sayfa/yürütme birimi bitene kadar beklemeniz gerekebilir. Bu, join() kullandığınız zamandır.
’—’ ana-yürütme birimi/üst-yürütme birimi/ana-program çalışması
‘…’ ana-yürütme birimi çalışması
’###’ join() sonrası isteğe bağlı üst-yürütme birimi
engellenmiş üst-yürütme birimi devam edebilir
‘***’ join-yordamı içinde ana-yürütme birimi ‘uyuyor’ , bitirmek için alt-yürütme birimi bekliyor
’,,,’ daemonized küçük yürütme birimi - ‘ignores’ lifetime of other threads;
terminates when main-programs exits; is normally meant for
join-independent tasks
Python
Python Thread - Join Method
Yordam Adı:
join()
Yordama Genel Bakış:
join yordamı çağrıldığında, çağrılan küçük yürütme birimi, çağrıldığı küçük yürütme birimi öbeği sonlandırılıncaya kadar engellenir.
Örneğin, join() bir ana yürütme biriminden çağrıldığında, ana yürütme birimi, join‘nin çağrıldığı alt yürütme biriminden çıkana kadar bekler. join() yordamının önemi, eğer join() çağrılmamışsa, ana yürütme birimi alt yürütme biriminden önce çıkabilmekte, bu da programların belirsiz davranışlarına yol açacak ve programın çalışmasını ve programın çalıştığı verilerin bütünlüğünü etkileyecektir.
join() yordamı da bir zaman aşımı değeri olarak belirtilebilir.
Örneğin, sunuculara ağ bağlantılarını yapan bir küçük yürütme biriminin, bağlantı tesisini öngörülen sayıda saniyeler içinde tamamlaması beklenir. Zaman aşımı değeri geçildiğinde, çağrılan küçük yürütme birimi tıkanma durumundan döner ve bir yapılandırma dosyasından bir dizi yedekleme sunucusuna bağlanmayı dener.
Bu gibi durumlarda, küçük yürütme biriminin çağrılması aksiyon öbeğinden bir sinyal gönderebilir ve çağrılan küçük yürütme biriminin durmasını isteyebilir.
join() yordamı, bir küçük yürütme birimi öbeğinden birkaç kez çağrılabilir.
İstisnalar
Aynı konu üzerinde join() aranması bir kilitlenme ile sonuçlanacaktır. Bu nedenle, join() aynı küçük yürütme birimi üzerinde çağrıldığında bir RuntimeError ortaya çıkar. Henüz başlatılmamış bir küçük yürütme birimi üzerinde join() çağrısı da bir RuntimeError neden olur.
Örnek:
Python
Yordam Adı:
run()
Yordama Genel Bakış:
run yordamı küçük bir yürütme biriminin gövdesini belirler.
run yordamı iki yolla kod alır. Biri run yordamının bir alt sınıfta geçersiz kılındığı zamandır. Bir diğeri, kaldırabilen bir öbeğin, Thread sınıfının kurucusu aracılığıyla bir hedef olarak geçirildiği zamandır. Her iki şekilde de, bir python yürütme birimini run() yordamı formüle edilebilir.
Python
Yordam Adı:
start()
Yordama Genel Bakış:
Bir python yürütme birimini başlatır.
Küçük bir yürütme biriminin, işletim sistemi bağlamında yürütülmeden önce başlatılması gerektiğinden, bazı kesirli delta süresinden sonra küçük bir yürütme birimi başlatılır.
İstisnalar
start() yordamı birden daha fazla kez çağrıldığında, bir RunTimeError yükseltir.
Gerekirse, küçük bir alt yürütme biriminin başka bir özdeşini tekrar oluşturun.
Örnek
Python
Python Thread - Daemon Property
Daemon Threads:
Bir python yürütme birimi öbeğinde ayarlanan bu özellik bir yürütme birimini daemonic yapar. Bir arka plan yürütme birimi ana yürütme biriminin çıkmasını engellemez ve arka planda çalışmaya devam eder. Aşağıdaki örnekte, daemon yürütme biriminden print ifadeleri ana yürütme birimi çıktısı olarak konsola yazdırılmayacaktır.
Örnek:
Python
16 Python Listeleri
Listeler bir dizidir ve temel bir veri yapısıdır. Bir liste dizeleri (metin) ve sayıları içerebilir. Bir liste, diğer programlama dillerindeki bir diziye benzer, ancak ek işlevselliklere sahiptir.
Python Listesi
Listeleri parantez [] ile tanımlarız. Verilere erişmek için aynı parantezler kullanılır.
Örnek liste kullanımı:
Python
Ekle/Kaldır
Listeyi değiştirmek için append() ve remove() işlevlerini kullanabiliriz.
Python
Sıralama listesi
Listeyi sort() fonksiyonunu kullanarak sıralayabiliriz.
Python
Listenin azalan sırada olmasını istiyorsanız, reverse() fonksiyonunu kullanın.
Python
17 Python If Bildirimleri
Python’da, if ifadeleri olarak bilinen koşullu ifadeleri tanımlayabilirsiniz.
Belirli koşullar sağlandığında bir kod bloğu yürütülür.
If Bildirimleri
Bu uygulamayı düşünün, x değerine bağlı olarak ilk veya ikinci kodu yürütür.
Python
Küçük bir oyun:
Bir değişken, kullanıcı tarafından her zaman tanımlanmayabilir, bu küçük oyunu düşünün:
Python
Koşullu Operatörler
Koşullu operatörler hakkında bir kelime
Operator
Tanımlama
!=
eşit değil
==
eş değerde olmak
>
daha büyük
<
daha küçük
Atama operatörünü (=) eşittir operatörle (==) karıştırmayın.
İç içe koymak
Birden fazla koşul yapmanın en basit yolu yuvalamadır:
Python
Okumak zorlaşabilir, 4 veya 6 koşulu birleştirmeyi düşünebilirsiniz. Neyse ki Python’un bunun için bir çözümü var, and anahtar kelimeyi kullanarak koşulları birleştirebiliriz.
Python
Bazen or operatörünü kullanmak isteyebilirsiniz.
18 Python Fonksiyonlar
Bir işlev, programınızda herhangi bir yerde çağrılabilen yeniden kullanılabilir koddur. İşlevler kodunuzun okunabilirliğini artırır: Birisinin uzun talimat listesi yerine işlevleri kullanarak kodu anlaması daha kolaydır.
Bunun üzerine, test edilebilirlik ve genişletilebilirliği geliştiren fonksiyonlar yeniden kullanılabilir veya değiştirilebilir.
İşlev Tanımı
Bu sözdizimini işlev olarak tanımlamak için kullanırız:
def anahtar kelime, Python’a bir parça yeniden kullanılabilir kodun (bir function) olduğunu bildirir. Bir programın birçok işlevi olabilir.
Pratik Örnek
Fonksiyon(parametreleri) kullanarak fonksiyonu çağırabiliriz.
Python
Fonksiyonun bir parametresi vardır, x. Dönüş değeri, fonksiyonun döndürdüğü değerdir. Tüm işlevlerin bir şeyler döndürmesi gerekmez.
Parametreler
Birden çok değişkeni geçebiliriz:
Python
19 Python Scope Alanı
Kapsam
Değişkenler sadece tanımlandıkları alana ulaşabilirler, buna kapsam adı verilir. Değişkenlerin kullanılabileceği kod alanı olarak düşünün. Python global değişkenleri (tüm programda kullanılabilir) ve yerel değişkenleri destekler.
Varsayılan olarak, bir fonksiyonda bildirilen tüm değişkenler yerel değişkenlerdir. Bir fonksiyonun genel değişkenine erişmek için, ‘global variable’ açıkça tanımlamak gerekir.
Örnek
Aşağıda yerel değişkenlerin ve kapsamın kullanımını inceleyeceğiz. Bu işe yaramaz:
Python
ama bu olacak:
Python
Bunu daha detaylı inceleyelim:
Python
Fonksiyonlarda fonksiyon çağırmak
Bir değişkenin içeriğini başka bir fonksiyondan da alabiliriz:
Python
Bir değişkene herhangi bir yere ulaşılabiliyorsa, kod global değişken olarak adlandırılır. Bir değişken sadece kapsam içinde biliniyorsa, buna yerel bir değişken deriz.
20 threading - bir işlem içinde eşzamanlı işlemleri yönetme
Amaç: Birkaç yürütme birimini yönetin.
Küçük yürütme birimlerini kullanmak, bir programın aynı işlem alanında aynı anda birden çok işlemi çalıştırmasına izin verir.
Thread Öbekleri
Bir Thread küçük yürütme birimi kullanmanın en kolay yolu, onu bir hedef işlevle başlatmak ve çalışmaya başlamasına izin vermek için start() işlevini çağırmaktır.
Çıktı, her birinde ‘Worker’ ile beş satırdır.
Python
Bir küçük yürütme birimi üretebilmek ve ne iş yapılacağını anlatmak için argümanlar iletmek yararlıdır. Herhangi bir öbek türü, küçük yürütme birimi parçacığına içlem olarak iletilebilir. Bu örnek, küçük yürütme birimi parçacığının yazdırdığı bir sayıyı geçirir.
Tam sayı içlemi artık her bir küçük yürütme birimi parçacığı tarafından basılan mesaja dahil edilmiştir.
Python
Güncel Thread Belirleniyor
küçük yürütme birimi tanımlamak veya adlandırmak için içlemler kullanmak hantal ve gereksizdir. Her Thread örneği, küçük yürütme birimi oluşturulduğunda değiştirilebilen varsayılan bir değere ile bir ada sahiptir. küçük yürütme birimi ları adlandırma, farklı işlemlerle uğraşan çoklu hizmet iş parçacıklı sunucu işlemlerinde kullanışlıdır.
Hata ayıklama çıkışı, her satırdaki geçerli küçük yürütme birimi parçacığının adını içerir. ‘Thread-1’ satırları, Thread parçacığı adı sütununda adsız küçük yürütme birimi parçacığı w2’ye karşılık gelir.
Python
Çoğu program, hata ayıklamak için print kullanmaz. logging modülü, %(threadName)s biçimlendirici kodunu kullanarak her günlük mesajına küçük yürütme birimi adını katmayı destekler. log mesajlarına küçük yürütme birimi isimleri dahil etmek, bu mesajları kaynağına geri göndermeyi mümkün kılar.
logging aynı zamanda thread-safe dir, bu yüzden farklı yürütme birimlerinden gelen mesajlar çıktıda ayrı tutulur.
Python
Daemon(artalan süreci) :Bilgisayarda arka planda çalışan, ihtiyaç duyulduğunda kullanılan bir program ya da hizmet
Artalan süreci ile artalan süreci olmayan yürütme birimleri
Bu noktaya kadar, örnek programlar, tüm küçük yürütme birimleri işlerini tamamlayana kadar kesin olarak çıkmayı beklemiştir. Bazen programlar, bir küçük yürütme birimini, ana programın çıkmasını engellemeden çalışan bir program olarak meydana getirir. Daemon küçük yürütme birimini kullanmak, küçük yürütme birimini kesmenin kolay bir yolunun bulunmadığı veya işinin ortasında küçük yürütme biriminin ölmesine izin vermediği veya veri kaybına neden olmayan servisler için kullanışlıdır(örneğin, bir servis izleme aracı için “kalp atışı” üreten bir küçük yürütme birimi). Bir küçük yürütme birimini bir daemon olarak işaretlemek için, oluştururken daemon=True geçirin veya set_daemon() ile True yöntemini çağırın. öntanımlı durum, küçük yürütme birimlerinin daemon olmamasıdır.
daemon yürütme birimi sleep() çağrısından uyandırmadan önce non_daemon yürütme birimlerinin tümü (ana yürütme birimi dahil) çıkış yaptığı için, yanıt daemon yürütme biriminden gelen ‘Exiting’ mesajını içermez.
Python
Bir daemon yürütme birimi çalışmasını tamamlayana kadar beklemek için join() yordamını kullanır.
Zaman aşımı, daemon yürütme biriminin uyuduğu süreden daha az olduğu için, join() geri döndükten sonra yürütme birimi hala ‘alive’ olur.
Python
Tüm Yürütme Birimlerini Sıralamak
Python sınıflarında _init_ ve self method(yordamlarını) anlamak
Python sınıflarında __init__ ve self yordamlarını anlamadan önce bir class(sınıf) ve object(öbek) nedir fikrine sahipsek çok yararlıdır.
Class :
Sınıf, ortaklaşa bazı özellik veya niteliklere sahip olan şeyler kümesi veya kategorisidir ve diğerlerinden tür, tip veya niteliğe göre farklılaşır. Teknik açıdan sınıfın, katı tutumlu bireysel nesneler için bir taslak olduğunu söyleyebiliriz.
Object :
Object(öbek), sınıfın eşleneklerinden biridir. Sınıfta tanımlanan işlevselliği uygulayabilir.
self :
self sınıfın eşleneğini ifade eder. self anahtarını kullanarak python da sınıfın methods(yordam) ve attributes(niteliklerine) erişebiliriz.
__init__ :
“__init__” python sınıflarında rezerve edilmiş bir metod (yordam)dır. Nesne yönelimli kavramlarda bir constructor(kurucu) olarak bilinir. Bir object(komut öbeği) sınıftan oluşturulduğunda çağrılır ve bir sınıfın özdeğerlerinin atanmasını sınıfa bırakır.
“__init__ “ nasıl kullanabiliriz?
Bir NFS oyunu oluşturduğumuzu düşünün. Bununiçin bir arabaya sahip olabiliriz. Araba “color”, “company”, “speed_limit” gibi. ve “change_gear”, “start”, “accelarate”, “move” gibi methods(yordamlar).
Python
Arabaların farklı tiplerini oluşturmaya başlayalım.
Aynı sınıf ile araba öbeklerinin iki farklı tipini oluşturudk. araba öbeğini oluşturuken aktardığımız ifadeler “ertiga”,”black”,”suzuki”,60 bu ifadeler öbeğe atanmak için __init__ method yordamına aktarılacak.
Burada, sihirli anahtar “self” sınıfın eşleneğini ifade eder. Verilen ifadeler ile özdeğerleri bağlar.
Yordamlara ve özniteliklere erişmek için sınıf içinde “self”in kullanımı.
Durum: Genişlik (b = 120), uzunluk (l = 160) olan dikdörtgen bir alanın maliyetini öğrenin. Her 1 kare birim (2000) rupiye malolur.
Python
Daha önce tartıştığımız gibi “self”, aynı obeği veya sınıfın eşleneğini temsil eder. Görüyorsanız, “get_area” yönteminin içinde “length” özdeğerin değerini almak için “self.length” komutunu kullandık. “length” özdeğeri, öbek oluşturma sırasında öbeğe (sınıfın eşleneğine) bağlanır. “self” sınıf içindeki nesneyi temsil eder. “self”, “r = Rectangle (160, 120, 2000)” ifadesindeki “r” gibi çalışır. “Def get_area (self):” metod yapısını görüyorsanız, “self” i metodda bir parametre olarak kullandık çünkü metodu çağırdığımızda nesne (sınıfın örneği) otomatik olarak diğer argümanlarla birlikte ilk argüman olarak geçer. yöntem. Başka bir argüman sağlanmazsa, yalnızca “öz” yöntemine iletilir. Sınıf içindeki yöntemi çağırmak için “self” kullanmamızın nedeni budur (“self.get_area ()”). sınıf tanımının dışındaki (“r.get_area ()”) yöntemi çağırmak için nesnesini (sınıf örneği) kullanırız. “r”, “r.get_area ()” yöntemini çağırdığımızda sınıfın örneğidir, “r” örneği kendi yerine ilk argüman olarak iletilir.
self.class.name represents the name of the class : self « Class « Python Tutorial
Python
How to Declare Classes : self « Class « Python Tutorial