logo

Hvad er andeskrivning i Python?

I denne tutorial lærer vi om andeskrivning. Det er et populært udtryk i Python, og det kommer fra at sige, 'Hvis den går som en and, svømmer som en and, ligner en and, så burde det nok være en and.'

Ovenstående udtalelse giver en idé til at identificere en and. Her behøver vi ikke have en genomisk sekvens af anden. Vi drager vores konklusion ud fra dens adfærd og ydre udseende.

Vi vil diskutere, hvad der præcis betyder at duck-type i Python-programmering.

Python følger EAFP (Lettere at bede om tilgivelse end tilladelse) snarere end LBLY (Se før du springer) filosofi. EAFP er i nogen grad forbundet med 'and-type'-stilen.

Dynamisk vs. statisk skrivning

Hovedårsagen til at bruge duck typing er at give support til dynamisk indtastning Python programmering . I Python behøver vi ikke at specificere variablens datatype, og vi kan gentildele de forskellige datatypeværdier til samme variabel i yderligere kode. Lad os se følgende eksempel.

Eksempel -

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

Produktion:

hvor finder jeg mine browserindstillinger
 

Som vi kan se i ovenstående kode, tildelte vi et heltal til en variabel x, hvilket gør det til int type. Derefter tildelte vi en streng og en liste til den samme variabel. Python-fortolkeren accepterer ændringer af datatyper af samme variabel. Dette er en dynamisk skriveadfærd.

Mange andre programmeringssprog såsom Java, swift er den statiske type. Vi skal erklære variabel med datatyperne. I eksemplet nedenfor forsøger vi at gøre det samme ved at bruge Swift i stedet for Python.

Eksempel -

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

Ovenstående kode kan ikke kompileres, fordi vi ikke kunne tildele en streng på Swift-sproget. Fordi variabel -en blev erklæret som et heltal.

spærrede numre

Koncept af Duck Typing

Tidligere har vi diskuteret, at Python er et dynamisk typesprog. Vi kan dog bruge den dynamiske tilgang med tilpassede datatyper. Lad os forstå følgende eksempel.

Eksempel -

 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) 

Produktion:

 Compiling Running Spell Check Convention Check 

I ovenstående kode har vi oprettet en VisualStudio klasse, der skal udføre() metode. I desktop-klassen har vi sendt iden som et argument i koden(). An det går er en genstand for VisualStudio klasse. Ved hjælp af ide ringede vi til udføre() metode til VisualStudio-klassen.

Lad os se et andet eksempel.

Eksempel - 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()) 

Produktion:

 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' 

I ovenstående kode afspejles Duck-klassens instans ved at kalde and_testen fungere. Det sker også med Sparrow-klassen, som implementerer svømme() fungere. Men i tilfældet med Crocodile-klassen, fejler den andetest-evalueringen, fordi den ikke implementerer svømme() fungere.

python sorteringsordbog

Hvordan andeskrivning understøtter EAFP

Andeskrivningen er den mest passende stil for EAFP, fordi vi ikke behøver at fokusere på 'type' af objektet. Vi skal kun tage os af den opførsel og evne . Lad os se følgende udsagn.

Når vi ser mange if-else-blokke, så er det en LBYL-kodningsstil.

Men hvis vi ser mange prøve-undtagen blokke, så er det en sandsynlighed en EAFP-koder.