Articles

Python da hanyoyin ci-gaba, ayyukan dunder don ingantaccen shirye-shirye

Python babban yaren shirye-shirye ne, kuma kamar yadda shaida ta GitHub, kuma shine na biyu mafi shaharar harshe a cikin 2022.

Mafi ban sha'awa fa'idodin Python shine babban al'umma na masu shirye-shirye.

Da alama Python yana da kunshin don kowane yanayin amfani.

A cikin sararin duniyar shirye-shiryen Python, akwai nau'ikan fasali waɗanda galibi masu farawa ba su lura da su ba, amma suna da mahimmanci ga yanayin yanayin harshe.

Hanyoyin sihiri saitin hanyoyin da aka riga aka tsaradefinites a cikin Python waɗanda ke ba da fasalulluka na musamman. Ana iya gane su cikin sauƙi ta hanyar dashes su biyu a farkon da ƙarshe, kamar __init__, __call__, __len__ … da dai sauransu.

Hanyoyin Sihiri

Hanyoyin sihiri suna ba da damar abubuwa na al'ada su yi kama da ginanniyar nau'ikan Python.

A cikin wannan labarin, za mu mai da hankali kan ayyuka masu ƙarfi na dunder. Za mu bincika manufarsu kuma mu tattauna amfani da su.

Ko kai novice Python ne ko ƙwararren mai tsara shirye-shirye, wannan labarin yana nufin samar muku da cikakkiyar fahimta game da ayyukan Dunder, sa ƙwarewar coding Python ɗin ku ta fi dacewa da jin daɗi.

Ka tuna, sihirin Python ya ta'allaka ne ba kawai a cikin sauƙi da haɓaka ba, har ma a cikin fasalulluka masu ƙarfi kamar ayyukan Dunder.

__init__

Wataƙila mafi mahimmancin aikin dunder na duka. Wannan ita ce hanyar sihiri da Python ke kira kai tsaye a duk lokacin da muka ƙirƙira (ko kamar yadda sunan ya nuna, ƙaddamar) sabon abu.__init__

Pizza class:
def __init__(kai, size, toppings):
girman kai = girman
kai.toppings = toppings

# Yanzu bari mu ƙirƙiri pizza
my_pizza = Pizza ('manyan', ['pepperoni', 'namomin kaza']))

print(my_pizza.size) # Wannan zai buga: babba
print(my_pizza.toppings) # Wannan zai buga: ['pepperoni', 'namomin kaza']

A cikin wannan misali, an ƙirƙiri wani aji mai suna Pizza. Mun saita aikin mu __init__ don haɗa da sigogi don tantancewa a lokacin farawa, kuma mun saita su azaman kaddarorin kayan mu na al'ada.

Anan, ana amfani da shi don wakiltar misalin ajin. Don haka idan muka rubuta self.size = girman, muna cewa, "Hey, wannan abin pizza yana da girman sifa size, kuma ina so ya zama kowane girman da na bayar lokacin da na halicci abin.

__str__ da __repr__

__Str__

Wannan hanyar sihiri ce ta Python wacce ke ba mu damar definish bayanin abin mu na al'ada.

Lokacin da kake buga abu ko canza shi zuwa kirtani ta amfani da shi str(), Python duba idan kuna da defiNa fito da wata hanya __str__ ga wannan ajin.

Idan haka ne, yi amfani da wannan hanyar don canza abu zuwa kirtani.

Za mu iya mika misalin Pizza don haɗa aiki __str__ kamar haka:

class Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): mayar f"A {self.size} pizza with {', '.join (self.toppings) )}" my_pizza = Pizza ('manyan', ['pepperoni', 'naman kaza']) buga(pizzana) # Wannan zai buga: Babban pizza tare da barkono, namomin kaza
__repr__

Aikin __str__ shine ƙarin hanyar da ba na yau da kullun ba na siffanta kaddarorin abu. A gefe guda, ana amfani da __repr__ don samar da ƙarin ƙa'ida, dalla-dalla da kwatancin abin al'ada.

Idan ka kira repr() a kan wani abu ko kuma kawai ka rubuta sunan abu a cikin na'ura, Python zai nemi hanya __repr__.

Se __str__ ba haka ba defiNite, Python zai yi amfani da shi __repr__ azaman madadin lokacin ƙoƙarin buga abu ko canza shi zuwa kirtani. Don haka sau da yawa yana da kyau defigama a kalla __repr__, ko da ba ka yi ba defifitowa __str__.

Ga yadda za mu iya defigama __repr__ ga misalin pizza na mu:

Pizza class:
def __init__(kai, size, toppings):
girman kai = girman
kai.toppings = toppings

def __repr__(kai):
koma f"Pizza('{self.size}', {self.toppings})"

my_pizza = Pizza ('manyan', ['pepperoni', 'namomin kaza']))
buga (repr(my_pizza)) # Wannan zai buga: Pizza ('manyan', ['pepperoni', 'namomin kaza']))

__repr__ yana ba ku kirtani wanda zaku iya gudu azaman umarnin Python don sake ƙirƙirar abin pizza, alhali __str__ yana ba ku ƙarin bayanin ɗan adam. Ina fatan zai taimaka muku tauna waɗannan hanyoyin dunder kaɗan kaɗan!

__kara__

A cikin Python, duk mun san cewa yana yiwuwa a ƙara lambobi ta amfani da mai aiki +, kamar 3 + 5.

Amma idan muna son ƙara misalan wani abu na al'ada fa?

Aikin dunder __add__ yana ba mu damar yin haka kawai. Yana bamu ikon yin hakan defibatar da halin ma'aikacin + akan abubuwan mu na musamman.

A cikin sha'awar daidaito, bari mu ɗauka muna so defigama halin + a kan misalin pizza. Bari mu ce duk lokacin da muka haɗa pizzas biyu ko fiye tare, za ta haɗu da duk abubuwan da suka dace ta atomatik. Ga yadda zai yi kama:

Pizza class:
def __init__(kai, size, toppings):
girman kai = girman
kai.toppings = toppings

def __add__(kai, wani):
idan ba misali (wani, Pizza):
Tada TypeError ("Zaku iya ƙara wani Pizza kawai!")
new_toppings = kai.toppings + wasu.toppings
mayar Pizza(size, sabon_toppings)

# Bari mu ƙirƙiri pizzas guda biyu
pizza1 = Pizza ('manyan', ['pepperoni', 'namomin kaza']))
pizza2 = Pizza ('manyan', ['zaitun', 'abarba']))

# Kuma yanzu bari mu "ƙara" su
hade_pizza = pizza1 + pizza2

print(combined_pizza.toppings) # Wannan zai buga: ['pepperoni', 'namomin kaza', 'zaitun', 'abarba']

Daidai da dunder __add__, za mu iya kuma defigama sauran ayyukan lissafi kamar __sub__ (ta hanyar ragi ta amfani da afareta -) da __mul__ (don ninkawa ta amfani da afareta *).

__len__

Wannan hanyar dunder tana ba mu damar defigama menene aikin len() dole ne mu dawo don abubuwan da aka keɓance mu.

Python yana amfani len() don samun tsayi ko girman tsarin bayanai kamar jeri ko kirtani.

A cikin mahallin misalinmu, zamu iya cewa "tsawon" pizza shine adadin toppings da yake da shi. Ga yadda za mu iya aiwatar da shi:

Pizza class:
def __init__(kai, size, toppings):
girman kai = girman
kai.toppings = toppings

def __len__(kai):
mayar len(self.toppings)

# Bari mu ƙirƙiri pizza
my_pizza = Pizza ('manyan', ['pepperoni', 'namomin kaza', 'zaitun']))

print(len(my_pizza)) # Wannan zai buga: 3

A cikin hanyar __len__, kawai mu dawo da tsawon jerin sunayen toppings. Yanzu, len(my_pizza) zai gaya mana adadin toppings a kai my_pizza.

__ tsari __

Wannan hanya ta dunder tana ba da damar abubuwa su zama masu motsi, watau ana iya amfani da su a cikin madauki.

Don yin wannan, dole ne mu ma defigama aikin __next__, Ana amfani da wannan don definish halin da yakamata ya dawo da ƙima ta gaba a cikin maimaitawa. Hakanan ya kamata ya sigina mai yiwuwa akan taron cewa babu ƙarin abubuwa a cikin jerin. Yawanci muna cimma wannan ta hanyar jefa banda StopIteration.

Ga misalin pizza ɗin mu, bari mu ce muna son maimaita abubuwan toppings. Za mu iya sanya nau'in Pizza ɗin mu mai daɗi definendo wata hanya __iter__:

Pizza class:
def __init__(kai, size, toppings):
girman kai = girman
kai.toppings = toppings

def __iter__(kai):
kai.n = 0
dawo kai

def __na gaba__(kai):
idan kai.n < len (self.toppings):
sakamako = kai.toppings[self.n]
kai.n += 1
mayar da sakamakon
wani:
tada StopIteration

# Bari mu ƙirƙiri pizza
my_pizza = Pizza ('manyan', ['pepperoni', 'namomin kaza', 'zaitun']))

# Kuma yanzu bari mu sake maimaita shi
don yin topping a my_pizza:
buga (topping)

A wannan yanayin, don kiran madauki __iter__, wanda ke farawa da counter (self.n) kuma ya mayar da abin pizza kanta (self).

Sa'an nan, da madauki kira __next__ don samun kowane topping bi da bi.

lokacin da __next__ dawo da duk kayan yaji, StopIteration yana jefa banda kuma don madauki yanzu ya san cewa babu sauran abubuwan toppings don haka zai zubar da tsarin haɓakawa.

Ercole Palmeri

Jaridar Innovation
Kada ku rasa mafi mahimmancin labarai akan ƙirƙira. Yi rajista don karɓar su ta imel.
Tags: python

Kwanan nan labarin

Veeam yana fasalta mafi cikakken tallafi don ransomware, daga kariya zuwa amsawa da murmurewa

Coveware ta Veeam zai ci gaba da ba da sabis na amsa abin da ya faru ta hanyar intanet. Coveware zai ba da damar bincikar bincike da damar gyarawa…

23 Afrilu 2024

Kore da Juyin Juya Halin Dijital: Yadda Kulawar Hasashen ke Canza Masana'antar Mai & Gas

Kulawa da tsinkaya yana kawo sauyi a fannin mai & iskar gas, tare da sabbin hanyoyin kula da tsirrai.…

22 Afrilu 2024

Mai kula da amincin Burtaniya ya ɗaga ƙararrawar BigTech akan GenAI

Hukumar CMA ta Burtaniya ta ba da gargadi game da halayen Big Tech a cikin kasuwar bayanan sirri. Akwai…

18 Afrilu 2024

Casa Green: juyin juya halin makamashi don dorewar makoma a Italiya

Dokar "Green Houses" da Tarayyar Turai ta tsara don inganta ingantaccen makamashi na gine-gine, ta kammala aikinta na majalisar tare da…

18 Afrilu 2024