logo

Vārdtelpa Python

Šajā apmācībā mēs uzzināsim par Python nosaukumvietu, struktūru, ko izmanto Python programmas objektiem piešķirto simbolisko nosaukumu organizēšanai, kāpēc nosaukumvieta ir svarīga un kā mēs varam tos izmantot savā Python programmā. Īsi ievadīsim nosaukumvietu.

konvertēt datumu par virkni

Kas ir Vārdtelpa?

Programmā Python katram objektam var piešķirt unikālu nosaukumu, izmantojot nosaukumvietu. Mainīgie un metodes ir Python objektu piemēri. Citiem vārdiem sakot, tas ir zināmo simbolisko nosaukumu un sīku informāciju par lietu, uz kuru attiecas katrs nosaukums, kolekcija. Vārdu var uzskatīt par atslēgu vārdnīcā, un objekti ir vērtības nosaukumvietā. Mums to vajadzētu izdomāt, izmantojot īstu modeli — nosaukumvieta atgādina uzvārdu. Ja klasē ir vairāki 'Pētera' vārdi, var būt grūti atrast 'Pētera' vārdu; tomēr, ja mēs īpaši pieprasām vārdu “Pīters Vorners” vai “Pīters Kaminss”, klasē, iespējams, nav ierasts, ka vairākiem skolēniem ir vienāds vārds un uzvārds.

Pateicoties nosaukumvietai, Python tulks var iegūt labāku izpratni par precīzu metodi vai mainīgo kodā. Rezultātā tā nosaukumā ir ietverta papildu informācija, tostarp atstarpe (saistīta ar darbības jomu) un nosaukums, kas apzīmē unikālu identifikatoru.

Programmā Python ir četru veidu nosaukumvietas, kas ir norādītas tālāk.

  • Iebūvēts
  • Globāli
  • Norobežojošs
  • Vietējais

Tā kā šīm nosaukumvietām ir dažādu kalpošanas laiku, Python tulks izveido nosaukumvietas pēc nepieciešamības un izdzēš tās, kad tās vairs nav vajadzīgas.

Izpratīsim dažādus Python nosaukumvietas veidus.

Iebūvētā nosaukumu telpa

Kā norāda nosaukums, tajā ir iepriekš noteikti visu Python iebūvēto objektu nosaukumi, kas jau ir pieejami Python. Uzskaitīsim šos vārdus ar šādu komandu.

Atveriet Python termināli un ierakstiet šādu komandu.

Komanda -

 dir(__builtins__) 

Izvade:

mediju pārraide
 ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip'] 

Iebūvēto nosaukumvietu izveido Python tulks, kad tā tiek palaista. Tie tiek pārtraukti, kad Python tulks tiek pārtraukts.

Globālā nosaukumu telpa

Globālā nosaukumvieta sastāv no jebkuriem Python nosaukumiem jebkurā galvenās programmas līmenī. Tas tiek izveidots, kad tiek izpildīts galvenais pamatteksts, un paliek pastāvēt līdz tulka darbības beigām.

Python tulks izveido globālu nosaukumvietu jebkuram modulim, ko mūsu Python ielādē kopā ar importēšanas priekšrakstu. Lai iegūtu vairāk informācijas, apmeklējiet mūsu Python moduli.

Vietējās un aptverošās nosaukumtelpas

Funkcija izmanto vietējās nosaukumvietas; Kad funkcija tiek palaista, Python tulks izveido jaunu nosaukumvietu. Lokālās nosaukumvietas turpina pastāvēt pēc funkcijas darbības pabeigšanas. Spēja var ietvert arī citas iespējas. Kā parādīts zemāk, mēs varam definēt vienu funkciju citā.

Piemērs -

 def f(): print('Initiate f()') def g(): print('Initiate g()') print('End g()') return g() print('Initiate f()') return f() 

Iepriekš minētajā modelī iespēja g () ir raksturota f () kolekcijā. Mēs saucām funkciju g () f () un galveno f () funkciju. Apskatīsim, kā darbojas iepriekš minētā funkcija:

  • Python izveido jaunu nosaukumvietu f(), kad mēs to izsaucam.
  • Tāpat f() izsaukumiem g(), g() ir sava atšķirīga nosaukumvieta.
  • Lokālā nosaukumvieta g() tika izveidota aptverošajai nosaukumvietai f().

Katra no šīm nosaukumvietām tiek pārtraukta, kad funkcija tiek pārtraukta.

Objekta/mainīgā darbības joma

Termins 'scope' norāda, kuram konkrēta Python objekta kodēšanas apgabalam var piekļūt. Katram objektam un mainīgajam programmā ir darbības joma, no kuras mēs varam piekļūt šim mainīgajam. Piemēram, funkcijas mainīgajam var piekļūt tikai funkcijā. Apskatīsim šādu ilustrāciju:

Piemērs -

 def scope_func(): print('Inside scope_func') def scope_inner_func(): var = 20 print('Inside inner function, value of var:',var) scope_inner_func() print('Try printing var from outer function: ',var) scope_func() 

Izvade:

 Inside scope_func Inside inner function, value of var: 20 Traceback (most recent call last): File 'd:/Python Project/listproblems.py', line 343, in scope_func() File 'd:/Python Project/listproblems.py', line 342, in scope_func print('Try printing var from outer function: ',var) NameError: name 'var' is not defined 

Python vārdu telpas vārdnīcas

Iepriekšējā apmācībā mēs runājām par to, kā nosaukumvietas ir kā vārdnīcas, kur atslēgas attēlo objektu nosaukumus un vērtības, kas attēlo faktiskos objektus. Kā vārdnīcas Python izmanto gan globālās, gan lokālās nosaukumvietas. Piekļuvi globālajām un lokālajām nosaukumu telpas vārdnīcām nodrošina Python globals() un locals() metodes.

minimālais algoritms

Globals() metode

Globals() metode atgriež atsauci uz pašreizējo globālās nosaukumvietas vārdnīcu. Mēs varam to izmantot, lai piekļūtu objektiem globālajā nosaukumu telpā. Apskatīsim tālāk redzamo piemēru.

Piemērs -

 >>> type(globals()) >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': } 

Kā mēs to redzam, tajā ir daudz iebūvētu ierakstu globālie () metodi. Tas var atšķirties atkarībā no jūsu operētājsistēmas un Python versijas. Tagad definēsim globālo mainīgo un ievērosim atšķirības.

 >>> a = 20 >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'a': 20} 

Pēc a = 20 piešķiršanas globālajai nosaukumvietas vārdnīcai tiek piešķirts jauns globālais mainīgais. Mēs varam piekļūt vērtībām, kā mēs piekļūstam vārdnīcās. Apskatīsim zemāk redzamo piemēru.

 >>> a = 20 >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'a': 20} >>> a 20 >>> globals()['a'] 20 

Mēs varam modificēt vārdnīcas vērtību, izmantojot funkciju globals ().

 >>> globals()['a'] = 100 >>> a 100 

Tagad pasaules vārdnīcās parādīsies jaunā a vērtība.

Vietējie() Funkcija

Python nodrošina arī locals() metodi, kas ir līdzīga globals(), bet tā vietā piekļūst objektiem vietējā nosaukumvietā. Apskatīsim šādu piemēru.

Piemērs -

 >>> def func(a, b): ... str1 = 'Hello' ... loc = locals() ... print(loc) ... >>> func(10, 20) {'a': 10, 'b': 20, 'str1': 'Hello'} 

Kad mēs izsaucam func(10, 20), locals() atgriež vārdnīcu, kas attēlo funkcijas vietējo nosaukumvietu. Funkcijas tvērumā mēs definējām lokālo mainīgo str1; vietējā nosaukumvieta ietvēra funkcijas argumentus, jo tie ir lokāli funkcijai func ().

Neskatoties uz to, kad mēs saucam vietējo cilvēku () iespēju, tas darbojas līdzvērtīgi globals () iespējām. Funkcija globals() un funkcija locals() nedaudz atšķiras. Funkcija globals () ne tikai definē papildu mainīgos, bet arī saglabā atgriešanas vērtību. Vārdnīca saturēs jaunos mainīgos un to vērtības. Apskatiet tālāk sniegto piemēru.

Piemērs -

 >>> glob_var = globals() >>> glob_var {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'a': 100, 'func': , 'glob_var': {...}, 'x': 100, 'y': 'JavaTpoint'} >>> x = 100 >>> glob_var {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'a': 100, 'func': , 'glob_var': {...}, 'x': 100, 'y': 'JavaTpoint'} 

Šeit ir glob_var ir atsauce uz globālo nosaukumu telpas vārdnīcu. Jaunie uzdevuma paziņojumi x un un parādījās glob_var vārdnīca.

Mainīgos ārpus darbības jomas

Izsaukšanas vidē funkcija var mainīt argumentu, nododot citu vērtību, taču dažreiz tā nevar mainīt vērtību.

powershell daudzrindu komentārs

Nemainīgu argumentu nevar modificēt ar funkciju.

Maināmu argumentu var mainīt vietā, bet to nevar pilnībā definēt no jauna.

Sapratīsim šādu scenāriju.

Piemērs -

java matemātika nejauši
 x = 20 def func(): x = 40 print(x) func() print(x) 

Izvade:

 40 20 

Mēs definējam globālo mainīgo x = 20 un arī funkcijā ar tādu pašu nosaukumu. Kad funkcija func() tiek izpildīta, tā izveido jaunu lokālā mainīgā atsauci uz vesela skaitļa objektu, kura vērtība ir 40. func() pamattekstā, piešķiršanas paziņojums neietekmēs globālo objektu.

Tomēr funkcija var modificēt mainīga tipa objektu ārpus tās lokālās darbības jomas. Sapratīsim tālāk sniegto piemēru.

Piemērs -

 my_list = ['Hello', 'From', 'JavaTpoint'] def func(): my_list[1] = 'Welcome to' return my_list print(func()) 

Mans_saraksts ir saraksts, un tā tips ir maināms. Func() var mainīties my_list, pat ja tas ir ārpus lokālā darbības jomas. Taču, ja mēģināsim atkārtoti piešķirt my_list, tas izveidos jaunu lokālo objektu un nemainīs globālo my_list. Apskatīsim zemāk redzamo piemēru.

Piemērs -

 my_list = ['Hello', 'from', 'JavaTpoint'] def func(): my_list = ['A', 'B', 'C', 'D', 'E', ''] return my_list print(func()) 

Izvade:

 ['A', 'B', 'C', 'D', 'E'] 

Secinājums

Mēs rūpējamies par nosaukumvietu, to, kā mēs varam to izmantot, un mainīgā lieluma pakāpi. Ar īsu Python programmu var izveidot daudzus atšķirīgus objektus. Sarežģītā Python programmā šis skaitlis var pārsniegt tūkstoti. Python nosaukumvieta ļauj tulkam vieglāk atcerēties šo objektu nosaukumus.