SORU
19 EKİM 2009, PAZARTESİ


İleri-ilan Python bir işlevi olması mümkün mü?

İleri-ilan Python bir işlevi olması mümkün mü? Bir liste ilan edilmeden önce cmp kendi işlevini kullanarak sıralamak istiyorum.

print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)])

Çağırma sonra cmp_configs yöntemin tanımını koymak için kodu düzenledim. Bu hata ile başarısız:

NameError: name 'cmp_configs' is not defined

Orada "" 8 ** yöntemi daha önce kullandığı? bildirmek için herhangi bir yolu var mı Benim kod daha temiz görünmesi değil mi?

Ben bazı insanlar sadece bu sorunum yok ki benim kod yeniden olmamı söylemek için cazip olacak varsayalım. Ancak, bu muhtemelen özyineleme bazı formları uygularken, örneğin kaçınılmaz olduğu durumlarda vardır. Eğer bu örnek hoşuna gitmedi diye, bir durum var varsayalımgerçektengerekli ileri bir işlev bildirmek için.

İleri-ilan bir fonksiyonu Python: gerekli olacaktır bu durumda düşünün

def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()

end_condition end_result önceden tanımlanmış.

Kodu yeniden düzenlemek için tek çözüm olduğunu ve her zaman çağırmaları önce tanımlarını koymak?

CEVAP
19 EKİM 2009, PAZARTESİ


Bir işlev bildirmek sevmiyorumöncekullanım ve işlev bildirmeksonraimkansız, ne başka bir modülde ilan hakkında? Teknik olarak hala daha önce ilan ama temiz.

Aşağıdaki gibi bir özyineleme oluşturabilirsiniz:

def foo():
    bar()

def bar():
    foo()

(ama işe yarıyor, Evet, sonsuz)

Python fonksiyonları değerler anonim gibi anonim, henüz bir adı ile ilişkili olabilir. Yukarıdaki kod foo() etmez bir arama fonksiyonu ile adı foo, onu çağıran bir fonksiyon olur bağlı adı foo noktası çağrı yapılır. Mümkün foo kod aşağı başka bir yerde redeclare ve bar Bu nedenle yeni işlevi çağırır.

'Sorun' sadece ilan edilmemiş. tam bir değişkeni almak için sormak gibi bir şey bu, çünkü çözülmesi senin

(aslında, 'anonim', bunun ne olduğunu bilmiyorum ama) . gerçekten değil

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • NextKsa

    NextKsa

    7 EKİM 2009
  • Sam Kear

    Sam Kear

    14 Temmuz 2007