for i in range nedir
GEAttic Mount TV Antenna, Long Range Antenna, Supports 4K 1080P Digital HDTV VHF UHF, Indoor Directional Antenna, Mounting Pole Included, Out of Sight Compact Design, 33692 4.1 out of 5 stars 6,396
Forloops can iterate over a sequence of numbers using the "range" and "xrange" functions. The difference between range and xrange is that the range function returns a new list with numbers of that specified range, whereas xrange returns an iterator, which is more efficient. (Python 3 uses the range function, which acts like xrange).
1 Specific range The term V F {\textstyle {\frac {V}{F}}} , where V {\displaystyle V} is the speed, and F {\displaystyle F} is the fuel consumption rate, is called the specific range (= range per unit mass of fuel; S.I. units: m/kg). The specific range can now be determined as though the airplane is in quasi steady-state flight. Here, a difference between jet and propeller driven aircraft has
Wideproduct range Leveraged trading opportunity awaits you in more than 300 products. Double your investments in the product you want. Stocks. Stocks. Currency.
Type 2 diabetes is typically associated with people who are overweight or obese, and individuals whose BMI is above the normal range () are said to face significantly greater health risks. However, BMI can misrepresent people who are either near or slightly over the 24.99 mark.
Site De Rencontre Payant Au Canada. Sıralama algoritmaları kullanmamızdaki amaç, algoritmanın isminden de anlaşılacağı üzere sahip olduğumuz veriyi en hızlı şekilde büyükten küçüğe ya da küçükten büyüğe bir sıraya sokmak. Bunun için kullanılan bir çok sıralama algoritması vardır. Bazısı çok hızlı ama yazımı zor, bazısı az sayıda veri için çok hızlı, bazısının da yazması kolaydır. Herhangi bir sayıdaki tip verilerin sınırlı bellek ve işlem gücü ile belirli bir sıraya göre dizilmesinin sağlanmasıdır. Burada önemli olan en optimum bellek ve performans ikilisini verecek bir algoritmanın elde edilmesidir. Sıralama algoritmalarının bazı kriterlere göre sınıflandırılabiliriz Bellek Kullanımı Çalışırken ek bellek ihtiyacı duyan algoritmalarda kullanılabilecek bir ölçüttür buna ek olarak ayrıca da sıralama işleminin yapılması sırasında hafızanın kullanımına göre de sıralama algoritmaları; Harici sıralama External Sort ve Dahili Sıralama Internal Sort.Hesaplama Karmaşıklığı Oluşturulmuş olan algoritmanın yaptığı işlem sayısının genel bir yapı ile ifade edilmesidir. Temel üç grup ölçek kullanılır. Bunlar en iyi best, ortalama average ve en kötü worst durumu olarak belirtilir. İşlem yoğunluğu zaman işleyişiyle paralel olduğundan ne kadar çok işlem yapılırsa o kadar uzun süre geçer algoritmanın işleyiş süresini de Karmaşıklığı İçerisinde ek bellek kullanmayan in place algoritmalarda kullanılan karşılaştırılabilmesi için önemli bir Algoritmanın uygulanması sırasında sıralanmış bir verinin tekrar sıralamaya tabi tutulup tutulmadığını belirten İç içe kendi kendini çağıran algoritmalarda kullanılan bir ölçüttür. Burada en önemli kriter stack dediğimiz maksimum iç içe çağırım kapasitesine dikkat edilmesi ve bu kapasitenin kullanılma sıklığıdır. Fakat en önemli kriterler Hafıza Verimliliği Memory efficiencyZaman Verimliliği Time efficiency Algoritma analizindeki iki önemli kriteri bunlardır. Bir algoritmanın hızlı çalışması demek daha çok hafızaya ihtiyaç duyması demektir. Tersi durumda da bir algoritmanın daha az yere ihtiyaç duyması daha yavaş çalışması demektir. Bir algoritma hem zaman hem de hafıza olarak verimliyse bu durumda diğer algoritmalardan başarılı sayılabilir. Aşağıda bazı sıralama algoritmaları verilmiştir Seçerek Sıralama Selection SortKabarcık Sıralaması Bubble SortEklemeli Sıralama Insertion SortBirleştirme Sıralaması Merge SortHızlı Sıralama Quick SortYığınlama Sıralaması Heap SortSayarak Sıralama Counting SortTaban Sıralaması Radix SortKabuk Sıralması Shell Sort Sallama Sıralaması Shaker SortRastgele Sıralama Bogo SortŞanslı Sıralama Lucky SortSerseri Sıralaması Stooge SortŞimşek Sıralaması Flahs SortTarak Sıralaması Comb SortGnome Sıralaması Gnome SortPermütasyon Sıralaması Permutation SortStrand Sort İplik Sıralaması 1. Seçerek Sıralama Selection Sort Selection Sort Seçerek Sıralama aslında performans bakımından diğer sıralama algoritmalarına kıyasla bir tık zayıf kalsa da zor durumlarımızda bize yardımcı oluyor. Uygulaması oldukça basit olan bu algoritma dizinin ilk elemanının en küçük eleman olduğunu varsayıyor. Ardından tek tek bu elemanı diğer elemanlarla karşılaştırıyor. Eğer karşılaştırdığı eleman daha küçük ise onu en küçük değer olarak alıyor ve ilk eleman yerine artık diğer elemanları onunla karşılaştırıyor. Dizinin sonuna vardığında ise en küçük elemanı dizinin başına yazıyor. Ardından bu işlemi 2. elemandan başlayarak yapıyor ve bulduğu en küçük değeri 2. sıraya koyuyor benzer şekilde işlemi dizinin son elemanına kadar aynı şekilde tekrarlıyor. Selection Sort’un kodlaması kısmı ise şu şekilde for i in rangelenarr enKucukId = i for j in rangei+1,lenarr if arr[j] arr[j+1] arr[j], arr[j+1] = arr[j+1],arr[j] Kabarcık Sıralaması Bubble Sort Nasıl Çalışır? 3. Eklemeli Sıralama Insertion Sort Yerleştirerek sıralama işlevi belirli bir anda dizinin belirli bir kısmını sıralı tutarak ve bu kısmı her adımda biraz daha genişleterek çalışmaktadır. Sıralı kısım işlev son bulunca dizinin tamamına ulaşmaktadır. Elemanların sırasına uygun olarak listeye tek tek eklenmesi ile gerçekleştirilen sıralamadır. for i in range1,lenarr deger = arr[i] j = i-1 whilej>= 0 and deger < arr[j] arr[j+1] = arr[j] j -= 1 arr[j+1] = deger Eklemeli Sıralama Insertion Sort Nasıl Çalışır? 4. Birleştirme Sıralaması Merge Sort Verinin hafızada sıralı tutulması için geliştirilen sıralama algoritmalarından bir tanesidir. Basitçe sıralanacak olan diziyi ikişer elemanı kalan parçalara inene kadar sürekli olarak ikiye böler daha sonra bu parçaları kendi içlerinde sıralayarak birleştirilir. Sonuçta elde edilen dizi sıralı dizinin kendisidir. Bu açıdan bir parçala fethet divide and conquere yaklaşımıdır. Sıralı iki veri grubunu birleştirerek üçüncü bir sıralı veri grubu elde etmeye dayanır. def mergesol, sag if not lensol or not lensag return sol or sag sonuc = [] i, j = 0, 0 while lensonuc < lensol + lensag if sol[i] < sag[j] i+= 1 else j+= 1 if i == lensol or j == lensag or sag[j] break return sonuc def mergesortarr if lenarr < 2 return arr orta = lenarr//2 sol = mergesortarr[orta] sag = mergesortarr[orta] return mergesol, sag Birleştirme Sıralaması Merge Sort Nasıl Çalışır? 5. Hızlı Sıralama Quick Sort Şu ana kadar bilinen en gözde ev hızlı algoritmadır. Uygulama adımlarını şu şekilde sıralayabiliriz Diziden herhangi bir eleman alpivot elamanPivot elemanından küçük olanları bir diziye, büyükleri bir diziye alt dizilerden yukarıdaki gibi pivot elemanları seçip aynı işlemi uygula. İç içe en küçük parçalara ulaşana kadar bu yöntemi dizicikleri birleştir def parcalamaarr,low,high i = low-1 pivot_deger = arr[high] for j in rangelow , high ifarr[j] < pivot_deger i = i+1 arr[i],arr[j] = arr[j],arr[i] arr[i+1],arr[high] = arr[high],arr[i+1] return i+1 def quickSortarr,low,high iflow < high pivot_deger = parcalamaarr,low,high quickSortarr, low, pivot_deger-1 quickSortarr, pivot_deger+1, high quickSortarr,0,lenarr-1 Hızlı Sıralama Quick Sort Nasıl Çalışır? Sıralama Algoritmalarının Karşılaştırılması Sık kullanılan sıralama algoritmalarının, verinin karmaşıklığına göre gösterdiği performans Sıralama Algoritmalarının Karşılaştırılması Kaynakça Bilgisayarkavramlari, Teknoloji, Researchgate, Enacademic, SerdarKuzucu, Medium Şunlar da hoşunuza gidebilir Yazar hakkında Halil Durmuş 1996 yılının Mart ayında Trabzon’da dünyaya geldim. Atatürk Üniversitesi, Bilgisayar Mühendisliği mezunuyum. Web sitemde ilgimi çeken konuları araştırarak yazılar paylaşıyorum.
Python thread ve process programlama kavramları sürekli birbirine karıştırılır. Bu dersimizde tüm kavramları tek tek işleyip multi thread ve process kullanımını göreceğiz. Multithreading programlama birçok programlama dili tarafından desteklenir ve programların eş zamanlı olarak birden fazla işi yapabilmesine olanak sağlar. Tabi bu sonuç olarak çok daha hızlı süreçler anlamına gelse de aynı zamanda deadlock ve race-condition gibi sorunları da beraberinde getirebilir. Yine de Python ile thread programlama diğer dillere bakarak çok daha kolaydır. İlk olarak kavramları tanımlamakla başlayalım Process Bir işletim sistemi üzerinde herhangi bir dil ile kodlanmış ve bir compiler derleyici ile derlendikten sonra hafızaya yüklenerek işlemcide çalıştırılan programlara process denir. Kısacası bir programın çalışan hali processtir. Thread Threadler ise processlerin içerisinde yer alan eş zamanlı olarak çalışabilen iş parçacıklarıdır. Yani threadler sayesinde kodlarımızı ardaşıl olarak yürütmek yerine eş zamanlı olarak yürütebiliriz. Bir process içinde birden fazla thread olabilir. Yani biz multithread bir programlamada aynı process içindeki thread sayısını artıracağız ama multiprocessing bir programlamada kaynak sayısını yani process sayısını artıracağız. Öyleyse her multithreading programlamayı görelim. Python ile multithreading programlama geliştirmek istiyorsak iki farklı modül kullanabiliriz. Bunlar _thread ve threading modülleridir. Fakat daha üstün bir modül olduğu için bu derste threading kullanacağız. İlk multi thread yapımızı oluşturalım ve küçük bir örnek yapalım. import threading def calistirthreadName for i in range7 printthreadName ,"çalışıyor" t1 = args = "thread-1", t2 = args = "thread-2", Burada kütüphanemizi dahil ettikten sonra Threadlerin çalıştıracağı fonksiyonu oluşturduk. Fonksiyonun tek yaptığı o esnada çalışan thread ismini ekrana yazdırmak. Bu ismi args parametreli tuple veri tipi ile gönderdik. Sizde fonksiyona dışarıdan bir değişken taşımak istediğinizde bu demet içerisine kendi değişkeninizi koyarak yapabilirsiniz. Fakat tek elemanlı demetlerin sonunda virgül olacağını unutmayın! Fonksiyonumuzu yazdıktan sonra iki adet thread oluşturduk ve target ile çalıştıracakları fonksiyonun ismini belirttik. Son iş olarak ise çalışmaya hazır olan threadlerimizi start ile işleme başlattık. Ekran çıktımız ise şu şekilde oldu Çıktıda gördüğünüz gibi Thread-1 çalışırken araya Thread-2 girmiş. Çünkü her iki thread de artık eş zamanlı olarak çalışıyor. Kim işini bitirirse ekrana çıktıyı basıyor. İşte multithreading programlamanın temeli budur. Unutmadan söyleyelim, yukarıda ki programı her çalıştırdığımızda çıktımız değişebilir çünkü hangi threadin daha önce işini bitireceğini bilemiyoruz. Thread Daemon Kavramı Normal bir python programımız çalıştırıldığında tek bir thread yani main thread oluşturulur ve işlemler bittikten sonra main thread sonlanır. Tabi ardından geriye hiçbir thread kalmadığı için Python programı da sonlandırılır. Multithreading programlamada da yine kaç tane thread varsa her birinin işini bitirmesini beklenir ve ardından iş kalmayınca program sonlandırılır. Peki daemon nedir? Daemon, oluşturduğumuz threadin işleri bitmese bile programın sonlandırılabileceğini belirtir. Yukarıda normal bir işleyişte program kapanmadan önce tüm threadlerin işlerini bitirmesi beklenir dedik ama daemon parametresi ile bazı threadleri işleri bitmese bile sonlandırılabilir ayarlayabiliriz. Yani özetle main thread sonlandığında daemon thread çalışıyor olsa bile sonlandırılır. import threading import time def zaman while True print def calistirthreadName for i in range5 printthreadName ,"çalışıyor" t1 = daemon=True t2 = args = "thread-2", Bu örneğimizde ise t1 isimli thread her saniye ekrana zamanı basarken t2 ise her saniye kendi adını basıyor. Normal bir işleyişte programımız her iki threadin de bitmesini beklemeli ama birinci threadin çalıştırdığı fonksiyonda sonsuz bir while döngüsü olduğu için maalesef ki bu kadar bekleyemez. Bu yüzden ilk threadimizi daemon olarak ayarlıyoruz ve ikinci thread bittiğinde ana programımız bu threadi acımadan sonlandırabiliyor. Ekran çıktımız ise şu şekilde olacaktır. Thread ve Queue Kullanımı Queue, yani kuyruk yapısı, FIFO First In First Out ve LIFO Last In First Out mimarilerini kullanan kurtarıcı bir kütüphanedir. Temelde bakıldığında bir diziye eleman ekleme ve eklendiği sıraya göre çıkarma işlemini başarılı bir şekilde yapabilmektedir. Peki threadler ile nasıl kullanabiliriz? Örneğin bir liste üzerinde çalıştığımızı düşünün. Başlattığımız threadler bu listedeki elemanları alıp işleyecek ve ardından listeden çıkaracaktır. Burada ki sorun bir threadin listedeki bir elemanla çalıştığı anda başka bir threadinde o elemanla çalışabilir olmasıdır. Halbuki biz listedeki bir elemanın bir kere işlenip listeden çıkarılmasını istemiştik. Bu sorunu hemen bir ekran çıktısıyla gösterelim import threading, queue liste = ['Ankara','İstanbul','Kayseri'] def islemq global liste printf"{q} Çıkarılacak eleman {liste[lenliste-1]}" for i in liste for i in range2 worker = args=f"Thread-{i}",, daemon=True Bu örnekte bir listedeki elemanları 2 farklı thread kullanarak listeden çıkarıyoruz. Fakat bu kodları çalıştırdığımızda birinci thread bir eleman çıkarsa bile diğer thread bu elemanın çıkmamış halindeki listede çalışıyor olabilir. Tıpkı aşağıdaki ekran çıktısında olduğu gibi. Öyleyse bu yapıda liste yerine Queue kullanmamız daha doğru olacaktır. Şimdi aynı örneği queue ile yapalım. import threading, queue q = liste = ['Ankara','İstanbul','Kayseri'] def islemthreadName,q global liste while not item = printf"{threadName} Çıkarılacak eleman {item}" for i in liste for i in range2 worker = args=f"Thread-{i}",q, daemon=True Burada listemizi FIFO yapısı ile kuyruğa ekledik ve threadlerimize bu kuyruk üzerinde çalışmalarını söyledik. Böylece bir thread gelip kuyruktan eleman aldığında bu elemanı kuyruktan çıkmış oluyor ve diğer thread kuyrukta bu elamanı bulamıyor. Ekran çıktımız ise program kaç defa çalışırsa çalışsın hep aynı sırayla elemanları verecek şekilde olacaktır. Kullandığımız komutları ise hızlıca özetlersek; import queue Queue kütüphanesini projeye ekliyoruzq = Kuyruk değişkenimizi Kuyruğa yeni bir eleman eklerken put fonksiyonu kullanılıritem = Kuyrukta sıradaki elemanı almak için get fonksiyonu En son alınan eleman ile işlemin bittiğini, sıradaki elemanın verilebileceğini belirtir. Kısaca kilit Liste boşalana kadar programın kapanmasına izin vermez. Daemon thread kullanırsanız zorunludur. Sonuç olarak eğer işlem sırası önemliyse kuyruk yapısını kullanmanız gerekir. Threading Modülü Methodları Threading kütüphanesi birçok kullanışlı yönteme sahiptir. Bu fonksiyonlardan bazıları şunlardır Aktif olarak çalışan thread sayısını geri Aktif olarak çalışan threadlerin listesini geri Main threadi geri Threadin tanımlayıcısını identifier geri döndürür. Küçük bir örnek üzerinde gösterelim. import threading,time def islemthreadName for i in range5 pass args="Thread-1",.start print çalışan thread sayısı print çalışan thread listesi print main thread print thread tanımlayıcısı Ekran çıktımız şu şekilde olacaktır.
Genellikle program kodları yukarıdan aşağı ve soldan sağa doğru yürütür. Bir işlev, ilk deyimden başlayıp son deyime doğru hareket ederek çalıştırılır. Fakat bir işlevin birden çok seferde çalıştırılması gerektiği durumlar da oluşabilir. Birden fazla seferde çalıştırılması gereken kodlar döngü deyimleri olarak ifade edilen kod blokları arasına alınarak çalıştırılırlar. Bir döngü bildirimi, bir deyimi veya deyim grubunu birden çok kez yürütmemizi sağlar. Python For Döngüsü Kullanımı Python’da for deyimi, bir liste veya bir dizge gibi sonlu olan dizi öğeleri üzerinde yinelenme yöntemi ile çalışır. Liste yada dizge öğeleri belirli bir düzene göre okunup döngü bloğu içinde işlenir. Kural for degisken_veri in dizi/dizge ifade/ ifadeler Döngü Kontrolleri Python for döngüsünü kullanmadan önce 3 anahtar kelimenin kullanımını açıklamak gerekiyor. break deyimi Döngüyü sonlandırıp, hemen ardındaki deyim üzerinden devam etmek için kullanılır. continue deyimi kullanıldığı bölümden sonraki kısmı atlayıp döngünün bir sonraki adımdan devam etmesini sağlar. pass deyimi Dizim olarak kodun olması gerektiği durumda kullanılır. Döngüyü sonlandırmaz yada atlamaz. Kullanıldığı yerdeki kodların çalıştırılmaz. Python For Örnekleri Örnek 1 Yazılım Bilişim’ cümlesinin harflerini yazdırın. !/usr/bin/python3for harf in 'Yazılım Bilişim' print 'Sıradaki Harf ', harfprint Örnek 2 5 elemanı bir dizinin öğelerini yazdırın. !/usr/bin/python3iller = ['İstanbul', 'Edirne', 'Ankara','Adana','İzmir']for il in iller print 'Sıradaki İl ', ilprint "Yazılım Bilişim" Örnek 3 Bir liste içindeki sayılardan beşin katı olan sayıları listeleyin. !/usr/bin/python3sayilar = [8,25,12,85,65,36,10,120,32,34,268,10,5,4,32]for sayi in sayilar if sayi%5 == 0 print 'Beşe bölünebilir '+ strsayielse print 'Döngü Bitti' Örnek 4 1 ile 10 arasındaki sayıları yazdırın. !/usr/bin/python3for sayi in range1,11 printsayi Örnek 5 Üçün katı dışındaki sayıların ekrana yazdırılması continue örneği !/usr/bin/python3for sayi in range0,20 if sayi%3==0 continue printsayi Örnek 6 1 ile 10 arasındaki sayıları tersten yazdırın. range metoduna bir parametre daha ekleyip saymanın yönünü ve miktarını belirtebilirsiniz. !/usr/bin/python3for sayi in range10,0,-1 print'sıradaki sayı',sayi Örnek 7 0 ile 20 arasındaki sayılardan çift olanları yazdırın. Yöntem 1 !/usr/bin/python3for sayi in range0,22,2 print'sıradaki sayı',sayi Yöntem 2 !/usr/bin/python3for sayi in range0,22 if sayi%2==0 print'sıradaki sayı',sayi Örnek 8 Python piramit oluşturma !/usr/bin/python3satir=10print'\n...YazılımBilişim...\n'for i in rangesatir print' '*satir-i-1 + '*'*2*i+1 Örnek 9 python for döngüsü ile ağaç yapımı !/usr/bin/python3satir=10print'\n...YazılımBilişim...\n'for i in rangesatir print' '*satir-i-1 + '*'*2*i+1for i in rangeintsatir/2 print' '*intsatir-satir/4+'*'*intsatir/2 İlginizi Çekebilir
Python’da yield kelimesinin ne işe yaradığını anlamak için önce generatorlerin ne olduğunu anlamalıyız. Ve generatorleri anlamadan önce, yinelemeleri anlamalısınız. Ancak, bunları öğrenmeden önce yield’a hızlı bir bakış atalım. return komutunu öğrendiğinizi varsayıyoruz. Bir benzetme olarak, return ve yieldı birbirinin ikizi gibi düşünebiliriz. return döndür ve durdur’ anlamına gelirken , yield döndür, ancak devam et’ anlamına gelir num_list’i return ile döndürmeye çalışalım def num_listn for i in rangen return i Çıktı In [5] num_list3 Out[5] 0 Bir liste yerine sadece tek bir sayı döndürdük. return benzer bir kodda asla mutlu bir şekilde ayrılmamıza izin vermiyor, sadece bir kez uygulanıyor ve bitiyor. yielda bakalım returnü yield ile değiştirelim In [10] def num_listn ... for i in rangen ... yield i ... In [11] num_list3 Out[11] In [12] listnum_list3 Out[12] [0, 1, 2] Şimdi tüm sayıları alabildik. return bir kez çalışır ve durur, ancak, yield planladığınız zamanlarda çalışır. returnü “bunlar arasından birini döndür” olarak yorumlayabiliriz. Diğer taraftan yieldı “bunların hepsini döndür” olarak yorumlayabiliriz. return ifadesini yeniden aşağıdaki gibi yazalım In [15] def num_listn ... result = [] ... for i in rangen ... ... return result In [16] num_list3 Out[16] [0, 1, 2] Burada ise return bir liste döndürdü. Buna karşın yield kullandığımızda bir generator elde ettik. Şimdi daha yield’a daha detaylı bakalım Yinelemeler nedir? Bir liste oluşturduğunuzda öğelerini tek tek okuyabilirsiniz. Öğelerini tek tek okumak yineleme olarak adlandırılır >>> listem = [1, 2, 3] >>> for i in listem ... printi 1 2 3 listem bir yinelenebilirdir. Bir list comprehension oluşturduğunuzda ise, hem bir liste oluşturursunuz ve hem de yinelenebilir >>> listem = [x*x for x in range3] >>> for i in listem ... printi 0 1 4 "for … in …" şeklinde kullanabileceğiniz her şey yinelenebilirdir; listeler, dizeler, dosyalar … Yineleme öğelerinden istediğimiz kadar kullanabiliriz. Dolayısıyla bunlar oldukça kullanışlılar. Ancak tüm değerleri bellekte saklarsak ve çok fazla değerimiz varsa kullanışlı olmayabilirler. Generator nedir? Generatorler yineleyicilerdir. Ancak bu yineleyiciler özel bir türdür ve yalnızca bir kez yinelenebilir. Generatorler değerleri bellekte saklamazlar ve kullanılacakları zaman üretirler on-the-fly >>> generatorum = x*x for x in range3 >>> for i in generatorum ... printi 0 1 4 [] yerine kullanmamız dışında her şey aynı. AMA, generatorler sadece bir kez kullanılabildiklerinden, for i in generatorum kalıbını ikinci kez kullanamayız 0’ı hesaplarlar, sonra unuturlar. 1’i hesaplarlar, 4’ü hesaplarlar ve işlemi bitirirler. yield nedir? yield, return gibi kullanılan bir anahtar kelimedir. Ancak, yield kullanıldığında fonksiyon bir generator döndürür. >>> def generator_olustur ... listem = range3 ... for i in listem ... yield i*i ... >>> generatorum = generator_olustur generator olusturalım >>> printgeneratorum generatorum bir nesne! >>> for i in generatorum ... printi 0 1 4 Bu örnek çok kullanılışlı görünmeyebilir. Ancak fonksiyonunuzun yalnızca bir kez okumanız gereken çok fazla elemanlı bir değer kümesi döndüreceğini bildiğinizde kullanışlı olacaktır. yield konusunda ustalaşmak için fonksiyonu çağırdığınızda, fonksiyon gövdesine yazdığınız kodun çalışmadığını anlamalısınız. Fonksiyon yalnızca generator nesnesini döndürür. Bu kısım biraz karmaşık. Kod bu şekilde generatorü her kullandığınızda kaldığı yerden devam edecektir. Şimdi işin zor kısmı for fonksiyonunuzda oluşturulan generator nesneyi ilk kez çağırdığında, fonksiyondaki kodu baştan yielda ulaşana kadar çalıştırır. Ardından döngünün ilk değerini döndürür. Fonksiyona yapılan sonraki her çağrı fonksiyonda yazdığınız döngünün başka bir yinelemesini çalıştırır ve dolayısıyla bir sonraki değeri döndürür. Bu, generator boş kabul edilene kadar devam edecektir. yield nasıl çalışır? yield, yineleyici protokolü uygulamanın kolay bir yolunu sağlar. Bunu __iter__ ve __next__ Python 2 veya __next__ Python 3 metotları ile gerçekleştirir. >>> def func ... yield 'Ben' ... yield 'bir generatorum!' ... >>> typefunc yield olan bir fonksiyon yine de bir fonksiyondur >>> gen = func >>> typegen ama generator döndürür >>> hasattrgen, '__iter__' yinelenebilirdir True >>> hasattrgen, 'next' ve .next .__next__ in Python 3 ile True iterator protokolünü çalıştırır Sade bir dille anlatmak gerekirse; Bir dizi sayı üzerinde işlem yapmak istiyorum, ancak bu dizinin yaratılmasıyla uğraşmak istemiyorum. Sadece yapmak istediğim işleme odaklanmak istiyorum. Bu yüzden aşağıdakileri yapıyorum Sizi arayıp belirli bir şekilde üretilmiş bir dizi sayı istediğimi söylüyorum ve algoritmanın ne olduğunu da adım, generator fonksiyonunun, yani yield içeren fonksiyonun tanımlanmasına karşılık geldi. Bir süre sonra sana “Tamam, bana sayıların sırasını anlatmaya hazır ol” diyorum. Bu adım, bir generator nesnesi döndüren generator fonksiyonu çağırmaya karşılık geldi. Henüz bana bir sayı söylemediniz; sadece kağıt ve kaleminizi aldınız. Şimdi size, “bana bir sonraki numarayı söyleyin” diyorum ve siz bana ilk numarayı söylüyorsunuz. Ondan sonra, benden bir sonraki numarayı sormamı bekliyorsunuz. Nerede olduğunuzu, hangi sayıları söylediğinizi ve bir sonraki sayının ne olduğunu hatırlamak sizin işiniz. Detaylar benim için önemli değil. Bu adım, generator nesnesinde .nexti çağırmaya karşılık kadar önceki adımları tekrar ettik ve sona geldik. Burada artık bana “başka sayı yok!” diyorsunuz. Bu adım, generator nesnenin işini bitirmesine ve bir StopIteration istisnasının fırlatılmasına karşılık geldi. Generator fonksiyonunun istisnayı oluşturması gerekmez. Fonksiyon sona erdiğinde veya bir dönüt verdiğinde otomatik olarak fırlatılır. Dolayısıyla generatorun yaptığı şey şöyledir; yürütmeye başlar, bir ürün verdiğinde duraklar ve bir .next değeri sorulduğunda son noktadan devam eder. Python’un yineleyici protokolü ile de tasarımı gereği mükemmel uyum sağlar. >>> def f ... yield 1 ... yield 2 ... yield 3 ... >>> g = f >>> for i in g ... printi ... 1 2 3 >>> for i in g ... printi ... >>> Artık yazdıracak bir şey kalmadı
HTML5 ile Web geliştiricilerinin bir çok işini kolaylaştıran nesneler geldiğini şüphesiz biliyorsunuzdur. Burada range nesnesini aklıma gelen güzel bir örneği açıklayacağım. Örnekte 1 resim ve range nesnesi bulunmaktadır. range üzerindeki değer değiştirildiğinde resim kendi ekseni etrafında döndürülecektir. Animasyonda göründüğü gibi…. Input nesesinin range olması ve range nesnesi ile hangi nitelikler kullanılır maddeler halinde açıklayayım. type=”range” range nesnesi oluşturmak için kullanılır. max=”sayı” range nesnesinin alabileceği en fazla değeri ifade eder. min=”sayı” range nesnesinin alabileceği en az değeri ifade eder. step=”sayı” range nesnesinin her hareketinde kaç adım gideceğini ifade eder. value=”sayı” range nesnesinin başlangıç değerini ifade eder. ve standart input özellikleriid, name class vs. Örnek HTML Yukarıdaki maddelere uygun şekilde input nesnesini aşağıdaki gibi oluşturuyoruz. Sadece input nesnesini yetmiyor. Bunu bir panel içine alıp resim etiketini de ekliyoruz. CSS< İlginizi Çekebilir
for i in range nedir