Pythonic Stili ile Kodlama:  Değiştirmemap()

Fonksiyonel programlama araçları gibi map()filter()ve reduce()uzun bir süre için var olmuştur. Bununla birlikte, liste anlayışları ve oluşturucu ifadeler, neredeyse her kullanım durumunda bunların doğal bir ikame haline gelmiştir.

Örneğin, tarafından sağlanan işlevsellik map(), bir liste anlama veya bir üreteç ifadesi kullanılarak neredeyse her zaman daha iyi ifade edilir. Aşağıdaki iki bölümde, map()kodunuzu daha okunaklı ve Pythonic yapmak için bir aramayı bir liste anlama veya bir oluşturucu ifadesi ile nasıl değiştireceğinizi öğreneceksiniz .

Liste Anlamlarını Kullanma 

Bir aramayı map()bir liste anlayışıyla değiştirmek için kullanabileceğiniz genel bir kalıp vardır . Bunu nasıl yapacağınız aşağıda açıklanmıştır:

# Generating a list with map
list(map(function, iterable))

# Generating a list with a list comprehension
[function(x) for x in iterable]

Listeyi anlamanın neredeyse her zaman çağrıdan daha net okuduğunu unutmayın map(). Liste anlayışları Python geliştiricileri arasında oldukça popüler olduğundan, bunları her yerde bulmak yaygındır. Bu nedenle, bir aramayı map()bir liste anlayışıyla değiştirmek , kodunuzun diğer Python geliştiricilerine daha tanıdık gelmesini sağlayacaktır.

İşte map()kare sayılardan oluşan bir liste oluşturmak için bir liste anlayışıyla nasıl değiştirileceğine dair bir örnek :

>>>

>>> # Transformation function
>>> def square(number):
...     return number ** 2

>>> numbers = [1, 2, 3, 4, 5, 6]

>>> # Using map()
>>> list(map(square, numbers))
[1, 4, 9, 16, 25, 36]

>>> # Using a list comprehension
>>> [square(x) for x in numbers]
[1, 4, 9, 16, 25, 36]

Her iki çözümü de karşılaştırırsanız, liste anlamayı kullanan çözümün neredeyse düz İngilizce gibi okuduğu için daha okunabilir olduğunu söyleyebilirsiniz. Ayrıca, liste comprehensions açıkça çağırmak için gereksinimini ortadan list()üzerinde map()nihai liste oluşturmak için.

Generator İfadelerini Kullanma 

map()mapİsteğe bağlı öğeleri veren bir yineleyici olan bir nesne döndürür . Dolayısıyla, bunun doğal ikamesi map()bir üreteç ifadesidir ,çünkü üretici ifadeleri, aynı zamanda talep üzerine öğeler veren yineleyiciler olan üretici nesneleri döndürür.

Python yineleyicilerinin bellek tüketimi açısından oldukça verimli olduğu bilinmektedir. map()Artık a yerine yineleyici döndürmesinin nedeni budur list.

Bir liste anlama ile bir üreteç ifadesi arasında küçük bir sözdizimsel fark vardır. İlki [], ifadeyi sınırlandırmak için bir çift köşeli parantez ( ) kullanır. İkincisi, bir çift parantez ( ()) kullanır . Bu nedenle, bir liste anlayışını bir üretici ifadesine dönüştürmek için, köşeli parantezleri parantezlerle değiştirmeniz yeterlidir.

Kullanan koddan daha net okuyan kod yazmak için üretici ifadelerini kullanabilirsiniz map()

>>>

>>> # Transformation function
>>> def square(number):
...     return number ** 2

>>> numbers = [1, 2, 3, 4, 5, 6]

>>> # Using map()
>>> map_obj = map(square, numbers)
>>> map_obj
<map object at 0x7f254d180a60>

>>> list(map_obj)
[1, 4, 9, 16, 25, 36]

>>> # Using a generator expression
>>> gen_exp = (square(x) for x in numbers)
>>> gen_exp
<generator object <genexpr> at 0x7f254e056890>

>>> list(gen_exp)
[1, 4, 9, 16, 25, 36]

Bu kodun önceki bölümdeki koddan temel bir farkı vardır: liste anlayışını bir üretici ifadesine dönüştürmek için köşeli parantezleri bir çift parantez olarak değiştirirsiniz.

Üreteç ifadeleri genellikle işlev çağrılarında bağımsız değişken olarak kullanılır. Bu durumda, oluşturucu ifadesini oluşturmak için parantez kullanmanıza gerek yoktur, çünkü işlevi çağırmak için kullandığınız parantezler aynı zamanda üreteci oluşturmak için sözdizimi sağlar. Bu fikirle, aşağıdaki list()gibi arayarak yukarıdaki örnekle aynı sonucu elde edebilirsiniz :

>>>

>>> list(square(x) for x in numbers)
[1, 4, 9, 16, 25, 36]

Bir işlev çağrısında bağımsız değişken olarak bir üreteç ifadesi kullanırsanız, fazladan bir parantez çiftine ihtiyacınız olmaz. İşlevi çağırmak için kullandığınız parantezler, oluşturucu oluşturmak için sözdizimi sağlar.

Üretici ifadeleri, map()bellek tüketimi açısından olduğu kadar etkilidir, çünkü her ikisi de talep üzerine öğeler üreten yineleyiciler döndürür. Bununla birlikte, jeneratör ifadeleri neredeyse her zaman kodunuzun okunabilirliğini artıracaktır. Ayrıca diğer Python geliştiricilerinin gözünde kodunuzu daha Pythonic yaparlar.

Python , yinelenebilir öğeler üzerinde haritalama işlemleri map().gerçekleştirmenize izin verir . Bir eşleme işlemi, dönüştürülmüş bir yinelenebilir oluşturmak için bir yinelenebilir dosyadaki öğelere bir dönüştürme işlevi uygulamaktan oluşur . Genel olarak, açık bir döngü kullanmadan yinelemeleri işlemenize ve dönüştürmenize izin verir.map()

Bu eğiticide, nasıl map()çalıştığını ve yinelemeleri işlemek için nasıl kullanılacağını öğrendiniz. Kodunuzu değiştirmek için kullanabileceğiniz bazı  Pythonic araçlarını da öğrenmiş olduk map().

Artık şunları nasıl yapacağınızı biliyorsunuz:

  • Python ile çalışın map()
  • Açık bir döngü kullanmadan yinelemeleri işlemek ve dönüştürmekmap() için kullanın
  • Karmaşık dönüşümler gerçekleştirmek için ve map()gibi işlevlerle birleştirinfilter()reduce()
  • Liste anlayışları ve oluşturucu ifadelerimap() gibi ara yaklaşabileceksiniz .Bu yeni bilgi ile map()kodunuzda kullanabilecek ve kodunuza işlevsel bir programlama stiliyle yaklaşabileceksiniz . Ayrıca map(), bir   liste anlama veya üreteç ifadesi ile değiştirerek daha Pythonic ve modern bir stile geçebilirsiniz .