Kodun çalışması için yeterli değil. - Robert C. Martin
Python, 2021'deki en popüler dillerden biridir.
Basit sözdizimi, onu yeni başlayan programcılar için popüler bir seçim haline getirir.
Dinamik doğası ve esnekliği nedeniyle, Python geliştiricileri bazen hatalı, verimsiz kod yazmaya eğilimlidir.
Bu makale okuyuculara Python'da bulunan yaygın anti-kalıpları tanıtacak ve daha iyi geliştirici uygulamalarına yol açacak düzeltmeler önerecektir.
Dahili
mapve işlevsel programlama
filter ilkeleri aracılığıyla Python'da yinelenebilir nesneleri dönüştürmemize yardımcı olur .
Her iki yöntem de bir işlevi ve yinelenebilirliği bağımsız değişken olarak kabul eder ve karşılık gelen bir nesneyi döndürür.
Bu nesne,
listPython'daki yerleşik kurucuya bir argüman olarak iletilerek bir listeye dönüştürülebilir .
lambdaİşlevleri genellikle
map,
filterişlevlerinin argümanları olarak kullanırız :
Kod oldukça hantal ve belirsiz görünüyor. Aynı sonucu elde etmenin daha iyi bir yolu, liste anlayışlarını kullanmaktır :
Lambda işlevlerinin olmaması, liste anlamalarını çok daha okunaklı ve öz yapar.
Açık ve özlü kod yazmak için liste anlayışları harikadır.
Bununla birlikte, bir liste anlama her zaman yinelenebilirdeki her bir değerin bir listesini oluşturur. Bu, giriş çok büyük olduğunda bellek sorunlarına yol açabilir; makinenizin çökmesine neden olabilir.
G enerator ifadeleri , hem liste anlama dünyalarının hem de üreteçlerin en iyilerini birleştirerek büyük girdi dizileriyle başa çıkmanın daha verimli bir yolunu sağlar.
Bunları oluşturmak için tek yapmanız gereken
[], bir liste anlayışındaki
()parantezleri parantezlerle değiştirmektir.
Tamamen yeni bir liste oluşturmak yerine, üretici ifadeleri bir yineleyici oluşturur.
Bu , oluşturma hızını azaltır ve bellek tahsisini optimize eder . Oluşturucu ifadesinin sonraki her öğesine
nextişlevi kullanarak veya üzerinde döngü oluşturarak erişebilirsiniz .
Not:
Jeneratör ifadeleri durum bilgilidir, bu yüzden onları yeniden kullanmaya çalışırken dikkatli olun. Birden fazla kullanmayı planlıyorsanız yineleyiciyi yeniden oluşturmanız gerekebilir.
Bunu nasıl yapacağınıza dair iyi bir fikir edinmek için Brett Slatkin tarafından yazılan " Etkili Python: 90 Belirli Daha İyi Python Yazma Yolları (2. Baskı) " nın 31. Maddesini okuyun .
rangeFonksiyon tamsayılar üzerinde yineleme için yararlıdır.
Listeler gibi yinelenebilen veri yapıları üzerinde yineleme yaparken, her öğeye erişmek için yalnızca for döngüsü sözdizimine güvenebilirsiniz. İşte kod:
Ancak indislere ve elementlere erişmek istediğimizde
rangebunu yapmak için listenin uzunluğu üzerindeki metodu aşağıdaki gibi kullanabiliriz:
lenListeyi çağırmanız ve ardından çıktıyı kullanarak sarmalamanız gerektiğinden kod okunamaz görünüyor
range. Daha Pythonic yapmak için kod okunabilirliğini geliştirmeliyiz.
Bunu yapmanın daha iyi bir yolu
enumerate, liste nesnesindeki işlevi çağırmaktır . Bu, liste öğelerinin endekslerini ve değerlerini veren bir oluşturucu yaratacaktır.
Bu çok daha temiz görünmüyor mu?
Sözlüklerin hızlı erişim, atama, ekleme ve silme becerisi, onu çok popüler bir veri yapısı haline getirir.
Yeni başlayan geliştiriciler , sözlükte bulunmayan bir anahtara erişmeye çalışırken genellikle sorunlarla karşılaşırlar .
Bunu halletmenin bir yolu, anahtarın sözlükte olup olmadığını kontrol etmektir ve işte size yardımcı olacak kod:
Bunu başarmanın başka bir yolu da aşağıdaki gibi try / exclude bloğunu kullanmaktır:
Yukarıdaki kod hedefimizi gerçekleştiriyor, ancak sözlük yöntemini kullanarak onu daha da geliştirebiliriz
get.
Köşeli parantezleri kullanarak bir sözlüğün anahtarına erişmek yerine , ilgili anahtarın değerini elde etmek için yöntemi
[]kullanabilirsiniz
get.
Ek olarak, anahtar yoksa,
getyöntem
Nonebir
KeyError. Bunun
getyerine anahtar bulunmaması durumunda varsayılan bir değer elde etmek için yönteme bir bağımsız değişken de iletebilirsiniz
None.
Python fonksiyonları hem kabul yeteneğine sahip pozisyonel ve anahtar kelime argümanlar.
Konumsal bağımsız değişken, ardından eşittir işareti (=) ve varsayılan değer gelmeyen bir addır.
Bir anahtar kelime bağımsız değişkeninin ardından bir eşittir işareti ve varsayılan değerini veren bir ifade gelir.
Bu tasarım nedeniyle, python işlevleri oluşturmak ve yeniden kullanmak için son derece esnektir.
Ancak, işlevleri tanımlarken kötü tasarım seçimleri, kodda düzeltilmesi zor hatalara yol açabilir.
Bileşik faizi hesaplayan bir fonksiyon örneğini ele alalım :
İşlevini çağırarak ortaya çıkar Tek sorun iki boolean argümanlar, yani
compounded_monthlyve
to_stringsonunda kolaylıkla birbirleri için karışabilir. Bu, izlenmesi zor sorunlara yol açabilir.
İşlev tanımını şu şekilde değiştirerek okunabilirliği artırabiliriz:
İki mantıksal bağımsız değişkeni anahtar sözcük bağımsız değişkenleri olarak belirterek, işlev çağıran, varsayılan değeri geçersiz kılacak olan ayarlamak istedikleri mantıksal değerleri açıkça belirtebilir.
Bununla birlikte, bunun yine de sorunlara neden olmasının ana nedeni, anahtar kelime argümanlarının isteğe bağlı olması ve dolayısıyla, arayanın bunları anahtar kelime argümanları olarak kullanmaya zorlamamasıdır.
Bu nedenle, işlev hala eski yöntem kullanılarak çağrılabilir:
calculate_compound_interest(100, 5, 2, False, False)
Bu soruna yönelik bir düzeltme, boole bağımsız değişkenlerini yalnızca işlevi tanımlarken anahtar sözcükler olmaya zorlamaktır:
*Sembolün konumsal argümanların sonunu ve yalnızca anahtar kelime argümanlarının başlangıcını gösterdiğini görüyoruz .
Şimdi şöyle diyelim:
calculate_compound_interest(100, 5, 2, False, False)
bir hataya yol açar:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-32-faf75d2ad121> in <module> ----> 1 print(calculate_compound_interest(1000, 5, 2, False, False)) TypeError: calculate_compound_interest() takes 3 positional arguments but 5 were given
Bununla birlikte, hala bir sorun var.
Arayanın
principal, gerekli ilk üç bağımsız değişken (
rate,,
time_in_years) için konumsal ve anahtar kelimelerin bir karışımını kullanmaya karar verdiğini varsayalım .
Bu üç parametre için işlev bağımsız değişken adlarının değiştirilmesi durumunda, Python yorumlayıcısının şikayet ettiğini göreceğiz. Aşağıdakine benzer bir şey söyleyecektir:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-36-42e7ec842cd5> in <module> ----> 1 calculate_compound_interest(principal=1000, rate=5, time_in_years=2) TypeError: calculate_compound_interest() got an unexpected keyword argument 'principal' --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-37-1bc57c40980f> in <module> ----> 1 calculate_compound_interest(1000, 5, time_in_years=2) TypeError: calculate_compound_interest() got an unexpected keyword argument 'time_in_years'
Python 3.8'de
/, yalnızca konumsal argümanların nerede bittiğini gösteren parametreyi kullanarak işlevi yeniden tanımlayabileceğimiz bir çözüm getirildi . İşte kod:
Şimdi işlevi böyle çağırmak doğru sonuçları verir:
Ancak böyle adlandırılırsa:
calculate_compound_interest(p=1000, r=5, t_in_y=2)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-21-883e876a7e8b> in <module> ----> 1 calculate_compound_interest(p=1000, r=5, t_in_y=2) 2 TypeError: calculate_compound_interest() got some positional-only arguments passed as keyword arguments: 'p, r, t_in_y'
Aşağıda, bu tür anti-örüntülere ilişkin daha birçok örneği bulabileceğiniz ve bunlara nasıl yaklaşılacağıyla ilgili bazı kaynakları listeleyeceğim.
Bir sonrakine kadar! ✋
Bilinç nedir? Yüzyıllardır filozofların ve bilim adamlarının kafasını karıştıran bir sorudur. Bazıları bunun bedenlerimizden bağımsız olarak gerçekten anlayamadığımız geçici bir şey olduğunu söylüyor.
Yıllık ortalama 154 bin dolar maaş ve istikrarlı iş büyümesi ile şimdi blok zinciri geliştirmeyi öğrenmek için ideal zaman. Blok zinciri teknolojilerini oluşturmak ve geliştirmek için blok zinciri geliştiricileri, bilgisayar ağı, kriptografi, algoritmalar ve veri yapıları dahil olmak üzere çeşitli beceriler kullanır.
Arka hikaye Her ürünün bir hikayesi vardır ve bu Yapdoof'un başlangıç hikayesidir. Yapdoof, Omept Technology Nijerya Limited'in bir ürünüdür.
Abha'da spor aktiviteleri için bir deneyim tasarlayalım! Programın neredeyse yarısına geldik ve 3. proje zamanı geldi! Yalan söylemeyeceğim bu proje şimdiye kadar yaptığım en bunaltıcı, stresli ama eğlenceli proje olabilir. Başlamak için, güzel Abha şehrinde spor aktiviteleri için bir deneyim tasarlamak olan meydan okumamızla tanıştık.
Güncel özet: Mevcut makro durum değişmeden kalsa da, faiz oranlarını artırma zamanı yaklaştıkça daha "öngörülü" fişler piyasadan çekilecek, ki bu normaldir. yatırımcılar üzerinde bir etki, bu etki sadece duygusal değil, aynı zamanda tüm Amerikalıları yiyecek, giyecek, barınma ve ulaşım gibi çeşitli yönlerden etkiliyor. İşte tam da bu nedenle daha fazla yatırımcı chiplerini borsalara önceden transfer ediyor veya önceden diplerde satmaya hazırlanıyor.Sadece faiz artırımından sonra trend üzerine bahse girmek istemiyorlar.Durum hala iyi, ancak sabah 6:45'te parçalandı ve şu ana kadar parçalandı. Bu, düşüşün duygusal tarafındaki panik ve iyi zamanlanmış. Ama yine de bir haftadır söyledim.Şu anda makro oyun koşulları büyük çaplı düşüş ve yükseliş trendini desteklemiyor.Faiz oranları ve GSYİH'nın tam olarak inmesi için genel şok düzenini değiştirmek zor. . Aslında her sabah Cumartesi ve Pazar günleri bu seviyede bir ezilme oluyor, daha iki gün önce yakalandı ve sonra hareket olmadı, bugün yakalanmadı ve ardından panikli bir takibi tetikledi. Bu sabah 10:00 itibariyle BTC pozisyonlarının fiyat dağılımı ve dün gece 23:00'ten bugüne veriler, bu sabahın erken saatlerinde başlayan ancak büyük bir artış görmeyen hızla yükselen ve ardından düşen düşüşü yaşadı. BTC adreslerindeki değişikliklerin sayısı Değişikliğin ölçeği, çünkü bu iniş ve çıkışların aşırı güçlü bir tepkiye neden olmayacağı, ancak borsada önceden depolanan çiplerin duygusal değişimlerinin daha fazla olacağı yargısına varılabilir. Her iki taraftaki aşırı fiyatlara bakılırsa, eskilerin elindeki BTC, hafta sonu boyunca hala normal dalgalanma aralığını izliyor, sadece 200 BTC'den fazlası bir bütün olarak piyasadan ayrılıyor, yüksek seviyede tutulan fişler büyük ölçüde dalgalanıyor, yaklaşık 51.000 $ civarında. Yaklaşık 1.900 BTC'lik BTC değişimi, ancak çapraz karşılaştırmadan sonra, en büyük olasılık hala borsaların değişiminden geliyor, bu nedenle aslında, yüksek seviyede kilitlenen fişlerin değişimi sadece 150'den az . Bu transfer dahil olsa bile, toplam kayıp yığınındaki 24.000 doların üzerindeki düşüş 4'ü geçmedi, 200 BTC Bu, ister kısa vadeli bir yükseliş, ister fiyatta düşüş olsun, en büyük oranı kaplayan kaybeden chiplerin tepki vermediği anlamına geliyor.Bu yüzden büyük ölçekli bir düşüş olmayacağına karar vermemin nedeni bu. Hafta sonları kalan düşük volatilite yerine adresler değişiyor. Üstelik, yalnızca erken dönem kâr ve zarar fişlerindeki değişiklikler azalmakla kalmıyor, mevcut anlaşmazlık fiyatı altındaki kısa vadeli işlem fişleri bile fazla yanıt vermedi ve hafta sonu genel satış baskısı hala düşük. Borsaya aktarılan BTC verisine bakılırsa, bu sabah saat 8:00 itibariyle satış baskısı gerçekten de düşmeye devam ediyor, bu da satış için güçlü bir isteklilik olmadığını gösteriyor. Ayrıntılı verilerde, 6:45'te düşmeye başlamasına rağmen, bu dönemde oluşan satış baskısının büyük olmadığı, sadece sabah 8:30'dan sonra ortaya çıkan güçlü satış baskısının olduğu da görülebiliyor. Borsaya aktarılan satış baskısı ile karşılaştırıldığında, borsadan çekilen para miktarı çok fazla değil.Genel satış baskısını karşılayabilse de, bu alım gücü seviyesi şokların durumunu değiştirmek için hala yeterli değil.Fiyat dalgalanıyor likiditenin düşük olduğu hafta sonları. Ayrıntılı verilerden, Pekin saatinden 8:00'den sonra satış baskısındaki artışla birlikte, para çekme sayısının da artmaya başladığı, ancak nispeten konuşursak, bazılarının hazırlıksız yakalandığı görülebilir. Bununla birlikte, genel oyun durumu açısından bakıldığında, satışta çok fazla fiş olmadığı ve satın alma gücü durmadığı için, aksine, aktif olarak satın alıyorlar ve karşılık gelen fişleri devre dışı bırakmaya devam ediyorlar. Bu aynı zamanda fonların reaksiyondan sonra satın alma arzusunun devam ettiğini, bu nedenle büyük ölçekli bir düşüşün gerçekleşmesinin zor olduğunu kanıtlıyor. Sarsıntı hala ana tema. Borsanın BTC hisse senedi verilerinden, hafta sonları düşük tiraj durumunda bile, borsadan kaybolmaya devam eden çok sayıda chip olduğu görülebilir, bu sadece satın alma gücünün çok daha yüksek olduğunu göstermez. satış baskısından ziyade, aynı zamanda mevcut ekonomik fraksiyonu temsil eder.Enflasyonda bir zirve ve fiyatlarda bir dip beklentileri. Hisse senedinin detaylı verilerinden sabah 8:00'den önce borsa hissesinin fiyat düşse bile sürekli düşüşte olduğu görülüyor. Saat sekizden sonra, tamamen farklıydı. Dolayısıyla fiyat düştüğünde genel satışın sabah 6:45'te başlamadığı, tam tersine şu anda daha büyük bir dalgalanma olmadığı açıkça görülüyor. Daha büyük ölçekli bir satış, ancak bu noktadan sonra duyarlılık tarafından yönlendirildi. Mevcut fon miktarının düşük olduğu ve taahhüt kapasitesinin yetersiz olduğu doğru olmakla birlikte, büyük çaplı panik satışlarını tetiklememiştir. Mevcut BTC sürekli sözleşme verilerine bakılırsa, fonlama oranı fiyat düşüşüyle düşüşe geçmedi, bunun yerine büyük ölçekli bir yükseliş hissiyatı var, bu da mevcut hissiyatın daha fazla olduğunu gösteriyor Yatırımcılar bunun sadece aşamalı bir düşüş olduğuna inanıyor. ve ABD enflasyonu zirveye ulaştığında BTC hala dibe vuracak. Aslında, bugünün düşüşü için bir neden yok ve bu sadece hissiyattaki düşüş eğiliminden kaynaklanmıyor çünkü bu Cuma BTC ve ETH opsiyonlarının aylık teslimatı olacak çünkü önceki aylar düşüşte.Durum, fiyat teslimattan önce her zaman en büyük acı noktasından uzaktır, bu nedenle opsiyon teslimatına dikkat eden çok daha az küçük ortak var, özellikle opsiyon satıcıları güçsüz ve bu ay farklı. Temmuz sonunda, BTC opsiyonlarının en büyük acı noktası 23.000 ABD doları ki bu tam olarak bu sabahki düşüşten önceki fiyat.Önceki aylardaki yaklaşık 10.000 ABD doları açıkla karşılaştırıldığında, bu ay aslında bu fırsatı yakalama fırsatı var. en büyük acı noktasına ulaşmak ve aynı zamanda en uzun-kısa oyun yoğun bir durumdur. Mevcut kısa-uzun oran 0,83 ve boğalar küçük bir aralıkta liderliğini sürdürüyor.Mevcut açık opsiyonlar 76.654 ve beklenen miktar yaklaşık 1,7 milyar ABD doları. Dolayısıyla rekabet daha yoğun olacak. ETH'nin en büyük acı noktası sadece 1400 dolar.Mevcut fiyat, son aylarda nadir görülen en büyük acı noktasından hala daha yüksek.Kısa-uzun oranı bile son aylarda 1'den 0'a düştü.
Jesenko ve benim 20 yıllık evlilik yolculuğumuza nasıl başladığımıza dair başlangıç hikayemizi pek kimse bilmiyor. Bazılarının, ilk dairemizi birlikte doldurmak için yeterince para kazanmamanın çok erken zamanlarıyla ilgili olabileceğinden eminim.