일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 딥러닝
- I'm Sorry
- 알고리즘
- 클라우드컴퓨팅
- 웹개발
- 자료구조
- 머신러닝
- 코딩
- 컴퓨터공학
- 자바스크립트
- 소프트웨어
- 버전관리
- 프로그래밍언어
- 보안
- 데이터베이스
- 2
- 데이터과학
- Yes
- 빅데이터
- 프로그래밍
- 네트워크
- 컴퓨터과학
- 소프트웨어공학
- 파이썬
- 네트워크보안
- 데이터분석
- 인공지능
- 컴퓨터비전
- 사이버보안
- 데이터구조
- Today
- Total
스택큐힙리스트
전역 변수에 액세스하려면 'global' 키워드가 필요하지 않은 이유는 무엇인가요? 본문
제 이해에 따르면, Python은 함수에 대한 별도의 이름 공간을 가지고 있으므로 함수 내에서 전역 변수를 사용하려면 아마도 global를 사용해야 할 것입니다.
하지만, global 없이도 전역 변수에 액세스 할 수 있었습니다.
>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
... return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'
왜 이게 작동하나요?
전역 변수에 할당하려고 할 때 UnboundLocalError on local variable when reassigned after first use 오류가 발생하는 것도 참조하세요. 전역 변수를 어떻게 사용하는지에 대한 일반적인 질문은 Using global variables in a function를 참조하세요.
답변 1
global 키워드는 지역 컨텍스트에서 전역 변수를 변경하거나 생성하는 데에만 유용하지만, 전역 변수를 생성하는 것은 드물게 좋은 해결책으로 여겨집니다.
def bob():
me = locally defined # Defined only in local context
print(me)
bob()
print(me) # Asking for a global variable
위의 것은 당신에게 제공됩니다.
locally defined
Traceback (most recent call last):
File file.py, line 9, in
print(me)
NameError: name 'me' is not defined
만약 global 문을 사용한다면, 변수는 함수의 범위 외부에서 사용 가능해져서 실제로 전역 변수가 되게 됩니다.
def bob():
global me
me = locally defined # Defined locally but declared as global
print(me)
bob()
print(me) # Asking for a global variable
위의 코드는 다음과 같은 결과를 제공합니다:
locally defined
locally defined
또한, 파이썬의 특성으로 인해, 로컬 컨텍스트에서 함수, 클래스 또는 다른 객체를 선언하는 데 global을 사용할 수도 있습니다. 그러나 무언가 잘못되거나 디버깅이 필요한 경우에는 악몽을 유발할 수 있으므로 권하지 않습니다.
답변 2
글로벌 키워드가 전역 변수에 필요하지 않은 이유는 무엇일까?파이썬에서 전역 변수는 함수와 다른 블록과는 별개로 '전역 영역'에서 정의된 변수를 의미한다. 이러한 변수는 프로그램의 어디에서나 사용할 수 있으며, 전역 변수를 사용하려면 'global' 키워드를 사용해야 한다고 생각할 수 있다. 하지만 사실은 'global' 키워드가 전역 변수에 필요하지 않다.
그 이유는 파이썬에서 변수의 범위(scope)는 먼저 지역 범위(local scope)에서 확인되고, 그 다음에 전역 범위(global scope)에서 확인되기 때문이다. 즉, 함수 내부에서 변수를 참조할 때 먼저 지역 범위를 확인하여 해당 변수가 없으면 전역 범위에서 변수를 참조하게 된다.
예를 들어 다음과 같은 코드를 생각해보자.
```
x = 10
def print_x():
print(x)
print_x()
```
위 코드에서 'print_x' 함수 내부에서 'x' 변수를 참조할 때 'global' 키워드를 사용하지 않았지만, 정상적으로 전역 변수 'x'의 값을 출력하게 된다.
하지만 함수 내부에서 전역 변수 'x'의 값을 변경하려면 'global' 키워드를 사용해야 한다. 다음과 같이 코드를 작성할 수 있다.
```
x = 10
def change_x():
global x
x = 20
change_x()
print(x)
```
위 코드에서 'change_x' 함수 내부에서 'x' 변수의 값을 20으로 변경하려면 'global' 키워드를 사용해야 한다. 이는 지역 범위에서 변수를 참조하는 것과는 달리, 변수의 값을 변경해야 하기 때문이다.
따라서 파이썬에서 전역 변수를 참조할 때는 'global' 키워드를 사용하지 않아도 된다. 하지만 변수의 값을 변경하려면 'global' 키워드를 사용해야 한다는 것을 기억해야 한다.