Глобални и локални променливи в Python
В Python променливите играят ключова роля за съхранението и управлението на данни. Поведението и достъпността им зависят от това къде са дефинирани в програмата. В тази статия ще изследваме глобалните и локалните променливи как работят и общи сценарии с примери.
Локални променливи
Локалните променливи се създават във функция и съществуват само по време на изпълнението му. Те не могат да бъдат достъпни извън функцията.
Пример 1: В този код ние създаваме и осъществяваме достъп до локална променлива във функция.
Python def greet (): msg = 'Hello from inside the function!' print ( msg ) greet ()
Изход
Hello from inside the function!
Обяснение: Определяме поздрав () с локална променлива MSG и го отпечатайте. Тъй като MSG съществува само по време на изпълнението на функцията, той е достъпен в рамките на функцията. Обаждане поздрав () Показва съобщението.
Пример 2 : В този пример ние създаваме локална променлива във функция и след това се опитваме да имаме достъп до нея извън функцията, която причинява грешка.
Python def greet (): msg = 'Hello!' print ( 'Inside function:' msg ) greet () print ( 'Outside function:' msg )
Изход
Traceback (последно повикване последно):
Файл '/home/guest/sandbox/solution.py' ред 6 в
Печат ('Външна функция:' MSG)
NameError: Името „msg“ не е дефинирано
Обяснение: MSG е локална променлива вътре поздрав () и може да бъде достъпен само там. Отпечатването му навън причинява грешка, защото тя не съществува в световен мащаб.
Глобални променливи
Глобалните променливи се декларират извън всички функции и могат да бъдат достъпни навсякъде в програмата, включително вътрешни функции.
В този пример ние създаваме глобална променлива и след това достъп до нея както вътре, така и отвън на функция.
Python msg = 'Python is awesome!' def display (): print ( 'Inside function:' msg ) display () print ( 'Outside function:' msg )
Изход
Inside function: Python is awesome! Outside function: Python is awesome!
Обяснение: MSG е глобална променлива, достъпна както вътре, така и отвън display () функция. Обаждане display () отпечатва глобалния MSG и печат MSG Извън функцията работи както се очаква.
Забележка: Ако променлива не се намери във функция (локален обхват) Python автоматично го търси в глобален обхват. Ако обаче локалната променлива има същото име като глобална, тя ще засенчи глобалната променлива вътре в тази функция.
Използване на локални и глобални променливи
Ако една променлива е дефинирана както в световен мащаб, така и локално с едно и също име, локалната променлива засенчва глобалната променлива във функцията. Промените в локалната променлива не засягат глобалната променлива, освен ако не декларирате изрично променливата за глобална.
Python def fun (): s = 'Me too.' print ( s ) s = 'I love Geeksforgeeks' fun () print ( s )
Изход
Me too. I love Geeksforgeeks
Обяснение: Вътре забавно () s е локална променлива, зададена на „и аз“. и отпечатва тази стойност. Извън глобалния s остава „обичам Geeksforgeeks“, така че печатането s След това показва глобалната стойност.
Промяна на глобалните променливи във функция
По подразбиране не може да се промени глобална променлива във функция, без да я декларира за глобална. Ако опитате Python, ще повдигне грешка, защото третира променлива като локална. За да промените глобална променлива, използвайте Глобална ключова дума .
Без глобален (причинява грешка)
Python def fun (): s += ' GFG' # Error: Python thinks s is local print ( s ) s = 'I love GeeksforGeeks' fun ()
Изход
UnboundLocalError: Локална променлива, посочена преди присвояване
Обяснение: Вътрешно забавление () python предполага, че S е локален, тъй като се опитваме да го модифицираме. Но не съществува локален S преди този ред, така че възникне грешка.
С Global (работи правилно)
Python s = 'Python is great!' def fun (): global s s += ' GFG' # Modify global variable print ( s ) s = 'Look for GeeksforGeeks Python Section' # Reassign global print ( s ) fun () print ( s )
Изход
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
Обяснение:
- Декларирайки S като Global казва на Python да използва променливата от глобалния обхват.
- Функцията първо добавя „GFG“ след това преназначава s.
- Промените продължават да съществуват извън функцията.
Global vs Local със същото име
Python a = 1 # Global variable def f (): print ( 'f():' a ) # Uses global a def g (): a = 2 # Local shadows global print ( 'g():' a ) def h (): global a a = 3 # Modifies global a print ( 'h():' a ) print ( 'global:' a ) f () print ( 'global:' a ) g () print ( 'global:' a ) h () print ( 'global:' a )
Изход
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
Обяснение:
- f () отпечатва глобален А, без да го променя.
- G () създава местен, оставящ глобален недокоснат.
- h () декларира A AS Global и го променя.
Локална променлива срещу глобална променлива
| Основа на сравнение | Глобална променлива | Локална променлива |
|---|---|---|
| Определение | Деклариран извън функциите | Деклариран във функции |
| Живот | Създаден, когато програмата стартира и унищожава, когато приключи | Създаден, когато функцията се извиква и унищожава, когато се върне |
| Споделяне на данни | Споделено във всички функции | Не се споделя; съществува само в рамките на неговата функция |
| Обхват | Може да се получи достъп до навсякъде в програмата | Достъпно само във функцията |
| Необходими са параметри | Не е необходимо преминаване на параметри | Може да бъде създаден чрез параметри или задачи вътре в функцията |
| Съхранение | Управлявано в глобалното пространство на имена (не е фиксирано местоположение на паметта) | Съхранява се в локалното пространство на имената на функцията (рамка на стека) |
| Стойност | Промените влияят на цялата програма | Промените са локални и не засягат други функции |