logo

Mit jelent a kacsa gépelés Pythonban?

Ebben az oktatóanyagban a kacsa gépeléséről fogunk tanulni. Ez egy népszerű kifejezés a Pythonban, és abból származik, hogy: 'Ha úgy jár, mint a kacsa, úszik, mint a kacsa, úgy néz ki, mint egy kacsa, akkor valószínűleg kacsának kell lennie.'

A fenti állítás ötletet ad egy kacsa azonosítására. Itt nincs szükségünk a kacsa genomi szekvenciájára. Következtetésünket viselkedéséből és külső megjelenéséből vonjuk le.

Megvitatjuk, mit jelent pontosan a kacsa gépelés a Python programozásban.

Python követi a EAFP (Könnyebb bocsánatot kérni, mint engedélyt), mint a LBLY (Look Before You Leap) filozófiája. Az EAFP némileg kapcsolódik a „kacsa gépelési” stílushoz.

Dinamikus vs. statikus gépelés

A kacsagépelés használatának fő oka a dinamikus beírás támogatása Python programozás . Pythonban nem kell megadnunk a változó adattípusát, és a különböző adattípus-értékeket egy másik kódban is hozzárendelhetjük ugyanahhoz a változóhoz. Lássuk a következő példát.

Példa -

 x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x)) 

Kimenet:

java isempty
 

Amint a fenti kódban láthatjuk, egy egész számot rendeltünk egy x változóhoz, így az int típus. Ezután ugyanahhoz a változóhoz egy karakterláncot és egy listát rendeltünk. A Python interpreter elfogadja ugyanazon változó adattípusainak változásait. Ez egy dinamikus gépelési viselkedés.

Sok más programozási nyelv, például a Java, a swift statikus típus. Változót kell deklarálnunk az adattípusokkal. Az alábbi példában ugyanezt a Swift használatával próbáljuk megtenni Python helyett.

Példa -

 # integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language' 

A fenti kód nem fordítható le, mert nem tudtunk karakterláncot hozzárendelni Swift nyelven. Mert változó a egész számként lett deklarálva.

nyilatkozat fedezete

Kacsa gépelés fogalma

Korábban már beszéltünk arról, hogy a Python egy dinamikus típusú nyelv. Használhatjuk azonban a dinamikus megközelítést egyéni adattípusoknál. Értsük meg a következő példát.

Példa -

 class VisualStudio: def execute(self): print('Compiling') print('Running') print('Spell Check') print('Convention Check') class Desktop: def code(self, ide): ide.execute() ide = VisualStudio() desk = Desktop() desk.code(ide) 

Kimenet:

 Compiling Running Spell Check Convention Check 

A fenti kódban létrehoztuk a Vizuális Stúdió osztályt, aminek muszáj végrehajt() módszer. Az asztali osztályban az ide-t argumentumként adtuk át a code()-ban. An megy tárgya Vizuális Stúdió osztály. Ide segítségével felhívtuk a végrehajt() A VisualStudio osztály módszere.

Lássunk egy másik példát.

Példa - 2

 class Duck: def swim(self): print('I'm a duck, and I can swim.') class Sparrow: def swim(self): print('I'm a sparrow, and I can swim.') class Crocodile: def swim_walk(self): print('I'm a Crocodile, and I can swim, but not quack.') def duck_testing(animal): animal.swim() duck_testing(Duck()) duck_testing(Sparrow()) duck_testing(Crocodile()) 

Kimenet:

nyilatkozat fedezete
 I'm a duck, and I can swim. I'm a sparrow, and I can swim. Traceback (most recent call last): File '', line 24, in File '', line 19, in duck_testing AttributeError: 'Crocodile' object has no attribute 'swim' 

A fenti kódban a Duck osztály példányát a hívás tükrözi a kacsa_tesztelés funkció. Ez történik a Sparrow osztállyal is, amely megvalósítja a úszás() funkció. De a Crocodile osztály esetében megbukik a kacsatesztelés értékelése, mert nem valósítja meg a úszás() funkció.

Hogyan támogatja a kacsa gépelés az EAFP-t

A kacsa gépelés a legmegfelelőbb stílus az EAFP-hez, mert nem kell a 'típus' a tárgyról. Csak vigyáznunk kell rá viselkedés és képesség . Lássuk a következő állításokat.

Ha sok if-else blokkot látunk, akkor ez egy LBYL kódolási stílus.

De ha sok try-kivéve blokkot látunk, akkor valószínűleg egy EAFP kódoló.