SORU
26 EKİM 2010, Salı


Neden't iç içe geçmiş işlev kapanışları olarak adlandırılan python değil mi?

Ve Python fonksiyonları iç içe gördü ve kapanışı tanımına uyuyor. Neden closures yerine nested functions deniyor?

İç içe işlevler dış dünya tarafından kullanılması nedeniyle kapanması değil mi?

GÜNCELLEME:Kilitler hakkında okuyordum ve saygı ile bu kavram hakkında Python için beni düşündürdü. Aradım ve makaleye bir yorum aşağıda biri tarafından söz buldum, ama o bu soruyu soruyorum neden bu kadar tamamen bu makaledeki açıklama anlayamadım.

CEVAP
26 EKİM 2010, Salı


Bir kapatma işlevi, yürütme tamamladı kapsayan bir kapsamdan yerel bir değişken için erişim oluşur.

def make_printer(msg):
    def printer():
        print msg
    return printer

printer = make_printer('Foo!')
printer()

make_printer çağrıldığında, yeni bir çerçeve yerel olarak sabit olarak printer fonksiyon için derlenmiş Kodu ve msg değeri yığına alınır. O zaman ve işlev oluşturur ve döndürür. *8 fonksiyonu* referanslar msg değişken çünkü, make_printer işlevi döndürdü sonra hayatta tuttu.

İç içe eğer işlevleri yok eğer değil yani

  1. kapsamları kapsayan yerel erişim değişkenleri
  2. bu kapsam dışında idam ediyorlar

sonra kapaklar değiller.

Burada kapatma değil, iç içe geçmiş bir fonksiyon örneği.

def make_printer(msg):
    def printer(msg=msg):
        print msg
    return printer

printer = make_printer("Foo!")
printer()  #Output: Foo!

Burada, bir parametre varsayılan değeri bağlama. Bu 12 ** işlev oluşturulduğunda ve msg dış değerini hiçbir başvuru 14 ** make_printer döner sonra bakıma ihtiyacı var bu yüzden oluşur. msg Bu bağlamda işlevi printer sadece normal yerel bir değişkendir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013
  • The Exploiteers

    The Exploite

    4 Ocak 2011