logo

Konstantes veidi Python | Konstantes nozīme Python

Šajā apmācībā mēs uzzināsim par pastāvīgajiem veidiem un to, kā tie palīdz uzlabot koda lasāmību. Ja neesat pazīstams, konstantes ir nosaukumi, kas apzīmē vērtības, kas programmas izpildes laikā nemainās. Tie ir visizplatītākais programmēšanas pamatjēdziens. Tomēr Python nav īpašas sintakses konstantu definēšanai. Kopumā Python konstantes ir mainīgas, kas nekad nemainās. Gaidāmajā sadaļā mums būs detalizēta diskusija par Python konstanti.

osi modeļa slāņi

Kas ir konstantes?

Parasti matemātikā tiek izmantots nemainīgs termins, vērtība vai daudzums, kas nekad nemainās. Programmēšanā konstante attiecas uz nosaukumu, kas saistīts ar vērtību, kas nekad nemainās programmēšanas izpildes laikā. Programmēšanas konstante atšķiras no citām konstantēm, un tā sastāv no divām lietām - nosaukuma un saistītās vērtības. Nosaukums apraksta konstantes būtību, un vērtība ir pašas konstantes konkrēta izteiksme.

Kad esam definējuši konstanti, mēs varam piekļūt tikai tās vērtībai, bet nevaram to mainīt laika gaitā. Tomēr mēs varam mainīt mainīgā vērtību. Reāls piemērs ir: Gaismas ātrums, minūšu skaits stundā un projekta saknes mapes nosaukums.

Kāpēc izmantot konstantu?

Programmēšanas valodās konstantes ļauj mums pasargāt sevi no nejaušas to vērtības maiņas, kas var izraisīt grūti atkļūdojamas kļūdas. Tas ir arī noderīgi, lai padarītu kodu lasāmāku un uzturējamāku. Apskatīsim dažas konstantes priekšrocības.

    Uzlabota lasāmība -Tas palīdz uzlabot koda lasāmību. Piemēram, ir vieglāk lasīt un saprast konstanti ar nosaukumu MAX_SPEED nekā pašu būtiskā ātruma vērtību.Skaidra nodomu paziņošana -Lielākā daļa izstrādātāju uzskata 3.14 par pi konstanti. Tomēr Pi, pi vai PI nosaukums noteiks nodomu skaidrāk. Šī prakse ļaus citam izstrādātājam saprast mūsu kodu.Labāka apkope -Konstantes ļauj mums izmantot vienu un to pašu vērtību visā jūsu kodā. Pieņemsim, ka mēs vēlamies atjaunināt konstantes vērtību; mums nav jāmaina katrs gadījums.Zems kļūdu risks -Konstante, kas apzīmē noteiktu vērtību visā programmā, ir mazāk pakļauta kļūdām. Ja mēs vēlamies mainīt aprēķinu precizitāti, vērtības aizstāšana var būt riskanta. Tā vietā, lai to aizstātu, mēs varam izveidot dažādas konstantes dažādiem precizitātes līmeņiem un mainīt kodu, kur mums nepieciešams.Pavedieniem droša datu glabāšana —A konstantes ir pavedieni droši objekti, kas nozīmē, ka vairāki pavedieni var vienlaikus izmantot konstanti, neriskējot zaudēt datus.

Lietotāja definētas konstantes

Lai Python definētu konstanti, mums ir jāizmanto nosaukšanas metode Python. Vārds jāraksta ar lielajiem burtiem ar pasvītrojumu, kas atdala vārdus.

Tālāk ir sniegts lietotāja definētu Python konstantu piemērs -

 PI = 3.14 MAX_SPEED = 300 DEFAULT_COLOR = '33[1;34m' WIDTH = 20 API_TOKEN = '567496396372' BASE_URL = 'https://api.example.com' DEFAULT_TIMEOUT = 5 BUILTINS_METHODS = ('sum', 'max', 'min', 'abs') INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', ... ] 

Mēs esam izmantojuši to pašu veidu, kā mēs veidojam mainīgos Python. Tātad mēs varam pieņemt, ka Python konstantes ir tikai mainīgie, un vienīgā atšķirība ir tāda, ka konstante izmanto tikai lielos burtus.

Lietojot lielos burtus, konstante izceļas no mūsu mainīgajiem, un tā ir noderīga vai vēlama prakse.

Iepriekš mēs apspriedām lietotāja definētos lietotājus; Python nodrošina arī vairākus iekšējos nosaukumus, kurus var uzskatīt par konstantēm un kurus vajadzētu uzskatīt par konstantēm.

Svarīgas Python konstantes

Šajā sadaļā mēs uzzināsim par dažām iekšējām konstantēm, kas tiek izmantotas, lai padarītu Python kodu lasāmāku. Sapratīsim dažas svarīgas konstantes.

Iebūvētās konstantes

Oficiālajā dokumentācijā Taisnība un Nepatiesi tiek uzskaitīti kā pirmā konstante. Šīs ir Python Būla vērtības un ir int gadījums. A Taisnība ir vērtība 1, un Nepatiesi ir vērtība 0.

Piemērs -

 >>> True True >>> False False >>> isinstance(True, int) True >>> isinstance(False, int) True >>> int(True) 1 >>> int(False) 0 >>> True = 42 ... SyntaxError: cannot assign to True >>> True is True True >>> False is False True 

Atcerieties, ka patiesie un viltus vārdi ir stingras konstantes. Citiem vārdiem sakot, mēs nevaram tos atkārtoti piešķirt, un, ja mēģināsim tos atkārtoti piešķirt, mēs saņemsim sintakses kļūdu. Šīs divas vērtības ir atsevišķi objekti Python, kas nozīmē, ka pastāv tikai viens gadījums.

Iekšējie Dunder vārdi

Python ir arī daudz iekšējo pērkons nosaukumi, kurus varam uzskatīt par konstantēm. Ir vairāki no šiem unikālajiem nosaukumiem, par __name__ un __file__ mēs uzzināsim šajā sadaļā.

Atribūts __name__ ir saistīts ar to, kā palaist noteiktu koda daļu. Importējot moduli, Python internal iestatīja __name__ uz virkni, kas satur moduļa nosaukumu.

jauns_fails.py

 print(f'The type of __name__ is: {type(__name__)}') print(f'The value of __name__ is: {__name__}') 

Komandrindā un ierakstiet šādu komandu -

 python -c 'import new_file' 

-c tiek izmantots, lai komandrindā izpildītu nelielu Python koda daļu. Iepriekš minētajā piemērā mēs importējām jauns_fails modulis, kas parāda dažus ziņojumus ekrānā.

Izvade -

 The type of __name__ is: The value of __name__ is: timezone 

Kā redzam, ka __name__ saglabā virkni __main__, tas norāda, ka izpildāmos failus varam palaist tieši kā Python programmu.

No otras puses, atribūtam __file__ ir fails, kuru Python pašlaik importē vai izpilda. Ja failā izmantosim atribūtu __file__, mēs iegūsim ceļu uz pašu moduli.

kartes atkārtošana java

Apskatīsim šādu piemēru -

Piemērs -

 print(f'The type of __file__ is: {type(__file__)}') print(f'The value of __file__ is: {__file__}') 

Izvade:

 The type of __file__ is: The value of __file__ is: D:Python Project
ew_file.py 

Mēs varam arī skriet tieši un iegūsim tādu pašu rezultātu.

Piemērs -

 print(f'The type of __file__ is: {type(__file__)}') print(f'The value of __file__ is: {__file__}') 

Izvade:

 python new_file.py The type of __file__ is: The value of __file__ is: timezone.py 

Noderīgas virknes un matemātikas konstantes

Standarta bibliotēkā ir daudz vērtīgu konstantu. Daži ir stingri saistīti ar konkrētiem moduļiem, funkcijām un klasēm; daudzi ir vispārīgi, un mēs varam tos izmantot vairākos scenārijos. Tālāk esošajā piemērā mēs izmantosim attiecīgi matemātikas un virknes moduļus matemātiku un virkni.

Sapratīsim šādu piemēru -

Piemērs -

 >>> import math >>> math.pi 3.141592653589793 >>> math.tau 6.283185307179586 >>> math.nan nan >>> math.inf inf >>> math.sin(30) -0.9880316240928618 >>> math.cos(60) -0.9524129804151563 >>> math.pi 3.141592653589793 

Šīm konstantēm būs būtiska nozīme, rakstot ar matemātiku saistītu kodu vai veicot dažus konkrētus aprēķinus.

Sapratīsim šādu piemēru -

Piemērs -

 import math class Sphere: def __init__(self, radius): self.radius = radius def area(self): return math.pi * self.radius**2 def perimeter(self): return 2 * math.pi * self.radius def projected_volume(self): return 4/3 * math.pi * self.radius**3 def __repr__(self): return f'{self.__class__.__name__}(radius={self.radius})' 

Iepriekš minētajā kodā mēs esam izmantojuši math.pi pasūtījuma vietā PI konstantes. Ar matemātiku saistītā konstante nodrošina vairāk kontekstu programmai. Math.pi konstantes izmantošanas priekšrocība ir tāda, ka, ja mēs izmantojam vecāku Python versiju, mēs iegūsim Pi 32 bitu versiju. Ja izmantosim iepriekš minēto programmu mūsdienu Python versijā, mēs iegūsim pi 64 bitu versiju. Tātad mūsu programma pati pielāgosies savai konkrētajai izpildes videi.

Virknes modulis nodrošina arī dažas noderīgas iebūvētas virknes konstantes. Zemāk ir tabula ar katras konstantes nosaukumu un vērtību.

Vārds Vērtība
ascii_mazie burti Abcdefghijklmnopqrstuvwxyz
ascii_lielais burts ABCDEFGHIJKLMNOPQRSTUVWXYZ
ascii_burti ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
cipariem 0123456789
heksacipari 0123456789abcdefABCDEF
oktoņciparus 01234567

Mēs varam izmantot šīs ar virknēm saistītās konstantes regulārās izteiksmēs, apstrādājot dabisko valodu, veicot virkņu apstrādi un daudz ko citu.

Tipa anotācijas konstantes

Kopš Python 3.8 mašīnrakstīšanas modulī ir iekļauta galīgā klase, kas ļauj rakstīt konstantes. Ja mēs izmantojam klasi Final, lai definētu konstantes programmā, mēs iegūsim statiskā tipa kļūdu, ko pārbauda mypy pārbaudītājs, un tas parādīs, ka mēs nevaram atkārtoti piešķirt galīgajam nosaukumam. Sapratīsim šādu piemēru.

Piemērs -

 from typing import Final MAX_Marks: Final[int] = 300 MAX_Students: Final[int] = 500 MAX_Marks = 450 # Cannot assign to final name 'MAX_SPEED' mypy(error) 

Mēs norādījām konstanto mainīgo ar galīgo klasi, kas norādīja tipa kļūdu, lai ziņotu par kļūdu, ja deklarētais nosaukums tiek piešķirts no jauna. Tomēr tas saņem ziņojumu par tipa pārbaudītāja kļūdu; Python maina MAX_SPEED vērtību. Tātad, Final nenovērš pastāvīgu nejaušu pārdalīšanu izpildlaikā.

Stīgu konstantes

Kā minēts iepriekšējā sadaļā, Python neatbalsta stingras konstantes; tai vienkārši ir mainīgie, kas nekad nemainās. Tāpēc Python kopiena ievēro nosaukšanas principu, izmantojot lielo burtu, lai identificētu konstantos mainīgos.

Tā var būt problēma, ja strādājam pie liela Python projekta ar daudziem programmētājiem dažādos līmeņos. Tāpēc būtu laba prakse, ja būtu mehānisms, kas ļauj mums izmantot stingras konstantes. Kā mēs zinām, Python ir dinamiska valoda, un ir vairāki veidi, kā padarīt konstantes nemaināmas. Šajā sadaļā mēs uzzināsim par dažiem no šiem veidiem.

.__slots__ atribūti

Python klases nodrošina iespēju izmantot atribūtus __slots__. Slotam ir īpašs mehānisms, lai samazinātu objektu izmēru. Tā ir objektu atmiņas optimizācijas koncepcija. Ja klasē izmantosim atribūtu __slots__, mēs nevarēsim pievienot jauno gadījumu, jo tajā netiek izmantoti __dict__ atribūti. Turklāt, ja nav a .__dict__ atribūts nozīmē optimizāciju atmiņas patēriņa ziņā. Sapratīsim šādu piemēru.

Piemērs — neizmantojot atribūtus __slots__

 class NewClass(object): def __init__(self, *args, **kwargs): self.a = 1 self.b = 2 if __name__ == '__main__': instance = NewClass() print(instance.__dict__) 

Izvade -

kas padara datoru ātru
 {'a': 1, 'b': 2} 

Katrs Python objekts satur dinamisku vārdnīcu, kas ļauj pievienot atribūtus. Vārdnīcas patērē daudz atmiņas, un __slots__ izmantošana samazina vietas un atmiņas zudumu. Apskatīsim citu piemēru.

Piemērs -

 class ConstantsName: __slots__ = () PI = 3.141592653589793 EULER_NUMBER = 2.718281828459045 constant = ConstantsName() print(constant.PI) print(constant.EULER_NUMBER) constant.PI = 3.14 print(constant.PI) 

Izvade -

 3.141592653589793 2.718281828459045 Traceback (most recent call last): File '', line 10, in AttributeError: 'ConstantsName' object attribute 'PI' is read-only 

Iepriekš minētajā kodā mēs inicializējām klases atribūtus ar slots atribūtiem. Mainīgajam ir nemainīga vērtība, ja mēģināsim mainīt mainīgo, mēs saņemsim kļūdu.

@īpašuma dekorētājs

Varam arī izmantot @īpašums dekorators, lai izveidotu klasi, kas darbojas kā konstantu nosaukumvieta. Mums vienkārši jādefinē konstantes īpašums, nenodrošinot tos ar iestatītāju metodi. Sapratīsim šādu piemēru.

Piemērs -

 class ConstantsName: @property def PI(self): return 3.141592653589793 @property def EULER_NUMBER(self): return 2.718281828459045 constant = ConstantsName() print(constant.PI) print(constant.EULER_NUMBER) constant.PI = 3.14 print(constant.PI) 

Izvade -

 3.141592653589793 2.718281828459045 Traceback (most recent call last): File '', line 13, in AttributeError: can't set attribute 

Tie ir tikai lasāmi rekvizīti, ja mēģināsim pārdalīt, mēs iegūsim an Atribūta kļūda.

Rūpnīcas funkcija namedtuple()

Python kolekcijas modulim ir rūpnīcas funkcija namedtuple (). Izmantojot nosaukts divkāršs() funkciju, mēs varam izmantot nosauktos laukus un punktu apzīmējumu, lai piekļūtu to vienumiem. Mēs zinām, ka korteži ir nemainīgi, kas nozīmē, ka mēs nevaram modificēt esošu nosauktu korešu objektu vietā.

Sapratīsim šādu piemēru.

Piemērs -

 from collections import namedtuple ConstantsName = namedtuple( 'ConstantsName', ['PI', 'EULER_NUMBER'] ) constant = ConstantsName(3.141592653589793, 2.718281828459045) print(constant.PI) print(constant.EULER_NUMBER) constant.PI = 3.14 print(constant.PI) 

Izvade -

 3.141592653589793 2.718281828459045 Traceback (most recent call last): File '', line 17, in AttributeError: can't set attribute 

@dataclass dekorētājs

Kā norāda tās nosaukums, datu klasē ir dati, tie var sastāvēt no metodēm, taču tas nav to galvenais mērķis. Lai izveidotu datu klases, mums ir jāizmanto @dataclass dekorētājs. Mēs varam arī izveidot stingras konstantes. @dataclass dekorētājs izmanto iesaldētu argumentu, kas ļauj mums atzīmēt mūsu datu klasi kā nemainīgu. @dataclass dekoratora izmantošanas priekšrocības, mēs nevaram modificēt tā instances atribūtu.

Sapratīsim šādu piemēru.

Piemērs -

 from dataclasses import dataclass @dataclass(frozen=True) class ConstantsName: PI = 3.141592653589793 EULER_NUMBER = 2.718281828459045 constant = ConstantsName() print(constant.PI) print(constant.EULER_NUMBER) constant.PI = 3.14 print(constant.PI) 

Izvade -

 3.141592653589793 2.718281828459045 Traceback (most recent call last): File '', line 19, in File '', line 4, in __setattr__ dataclasses.FrozenInstanceError: cannot assign to field 'PI' 

Paskaidrojums -

Iepriekš minētajā kodā mēs esam importējuši @dataclass dekoratoru. Mēs izmantojām šo dekoratoru ConstantsName, lai padarītu to par datu klasi. Mēs iestatījām iesaldēto argumentu uz True, lai padarītu datu klasi nemainīgu. Mēs izveidojām datu klases gadījumu, un mēs varam piekļūt visām konstantēm, bet nevaram tās modificēt.

Java 8 funkcijas

.__setattr__() īpašā metode

Python ļauj mums izmantot īpašu metodi, ko sauc par .__setattr__(). Izmantojot šo metodi, mēs varam pielāgot atribūtu piešķiršanas procesu, jo Python automātiski izsauc metodi katrā atribūtu piešķiršanā. Sapratīsim šādu piemēru -

Piemērs -

 class ConstantsName: PI = 3.141592653589793 EULER_NUMBER = 2.718281828459045 def __setattr__(self, name, value): raise AttributeError(f'can't reassign constant '{name}'') constant = ConstantsName() print(constant.PI) print(constant.EULER_NUMBER) constant.PI = 3.14 print(constant.PI) 

Izvade -

 3.141592653589793 2.718281828459045 Traceback (most recent call last): File '', line 22, in File '', line 17, in __setattr__ AttributeError: can't reassign constant 'PI' 

Metode __setattr__() neļauj veikt nekādas piešķiršanas darbības ar klases atribūtiem. Ja mēs mēģinām pārdalīt, tas vienkārši paaugstina an Atribūta kļūda.

Secinājums

Konstantes visbiežāk tiek izmantotas programmēšanas koncepcijā, īpaši matemātiskā terminā. Šajā apmācībā mēs uzzinājām par svarīgajiem konstantu un to garšu jēdzieniem. Python kopiena izmanto lielos burtus kā nosaukumu, lai identificētu konstantes. Tomēr mēs esam apsprieduši dažus iepriekšējus veidus, kā izmantot konstantes Python. Mēs esam apsprieduši, kā uzlabot koda lasāmību, atkārtotu izmantošanu un apkopi ar konstantēm. Mēs minējām, kā izmantot dažādas metodes, lai mūsu Python konstantes būtu stingri nemainīgas.