Python의 전역 및 지역 변수 소개
게시 됨: 2021-08-26Python은 매우 특이한 방식으로 변수를 처리합니다. 많은 프로그래밍 언어는 기본적으로 변수를 전역으로 간주하지만(로컬로 선언되지 않는 한) Python은 반대로 선언하지 않는 한 변수를 로컬로 간주합니다. Python이 기본적으로 변수를 로컬로 고려하는 원동력은 전역 변수를 사용하는 것이 일반적으로 잘못된 코딩 방식으로 간주되기 때문입니다.
따라서 Python에서 프로그래밍하는 동안 변수 정의가 함수 내에서 발생하면 기본적으로 로컬입니다. 함수 본문 내에서 이 변수를 수정하거나 조작하면 이 함수의 범위 내에서만 유지됩니다. 즉, 변수가 함수의 변수와 이름이 같더라도 이러한 변경 사항은 함수 외부의 다른 변수에 반영되지 않습니다. 모든 변수는 정의된 함수의 범위에 존재하며 해당 값을 보유합니다. Python 변수 및 프로젝트에 대한 실무 경험을 얻으려면 미국 최고의 대학에서 제공하는 데이터 과학 인증을 시도하십시오.
이 기사를 통해 전역 변수를 정의하는 방법과 함께 Python에서 지역 및 전역 변수의 개념을 살펴보겠습니다. 우리는 또한 "비지역 변수"로 알려진 것을 살펴볼 것입니다.
읽어!
목차
Python의 전역 및 지역 변수
Python의 함수 본문 내에서 전역 값을 사용하는 방법을 이해하기 위해 예제를 살펴보겠습니다.
프로그램:
def 함수():
인쇄(문자열)
string = "나는 파이썬을 사랑합니다!"
함수()
산출
나는 파이썬을 사랑한다!
보시다시피 변수 string에는 "I love Python!"이라는 값이 지정됩니다. func()가 호출되기 전에. 함수 본문은 print 문으로만 구성됩니다. 함수 본문 내에서 문자열 변수에 대한 할당이 없으므로 대신 전역 변수의 값을 사용합니다.
결과적으로 출력은 변수 문자열의 전역 값이 무엇이든 간에, 이 경우에는 "I love Python!"이 됩니다.
이제 func() 내부의 string 값을 변경하고 전역 변수에 어떤 영향을 미치는지 살펴보겠습니다.
프로그램:
def 함수():
string = "나는 자바를 사랑한다!"
인쇄(문자열)
string = "나는 파이썬을 사랑합니다!"
함수()
인쇄(문자열)
산출:
나는 자바를 사랑한다!
나는 파이썬을 사랑한다!
위의 프로그램에서 func() 함수를 정의했으며 그 안에 "I love Java!" 값을 가진 변수 문자열이 있습니다. 따라서 이 변수는 함수 func()에 대해 로컬입니다. 그런 다음 앞에서와 같이 전역 변수가 있고 함수와 print 문을 호출합니다. 먼저 함수가 트리거되어 해당 함수의 print 문을 호출하고 "I love Java!" 출력을 전달합니다. – 해당 함수의 지역 변수입니다. 그런 다음 프로그램이 함수 범위를 벗어나면 s의 값이 "I love Python"으로 변경되고 이것이 우리가 두 행을 모두 출력으로 얻는 이유입니다.
이제 처음 두 가지 예를 추가하고 print 문을 사용하여 문자열에 액세스한 다음 새 값을 할당해 보겠습니다. 본질적으로 우리는 문자열을 지역 변수와 전역 변수로 만들려고 합니다.
다행히 Python은 이러한 혼동을 허용하지 않으며 오류가 발생합니다. 방법은 다음과 같습니다.
프로그램:
def 함수():
인쇄(문자열)
string = "나는 자바를 사랑한다!"
인쇄(문자열)
string = "나는 파이썬을 사랑합니다!"
함수()
출력(오류):
——————————————————————————
UnboundLocalError 추적(가장 최근 호출 마지막)
<모듈>의 <ipython-input-3-d7a23bc83c27>
5
6 문자열 = "나는 파이썬을 사랑합니다!"
—-> 7 func()
func()의 <ipython-input-3-d7a23bc83c27>
1 def func():
—-> 2 인쇄(문자열)
3 문자열 = "나는 자바를 사랑해!"
4 인쇄(문자열)
5
UnboundLocalError: 할당 전에 참조된 지역 변수 's'
분명히 Python은 변수가 함수 내에서 전역 및 지역 모두를 허용하지 않습니다. 따라서 func() 내의 문자열에 값을 할당하기 때문에 지역 변수를 제공합니다. 결과적으로 첫 번째 인쇄 문은 오류 알림을 표시합니다. 함수 범위 내에서 생성되거나 변경된 모든 변수는 명시적으로 "전역"으로 선언되지 않는 한 지역적입니다.
파이썬에서 전역 변수 정의하기
global 키워드는 우리가 전역 변수에 접근하고 있음을 파이썬에 알리기 위해 필요합니다. 방법은 다음과 같습니다.
프로그램:
def 함수():
전역 문자열
인쇄(문자열)
string = "하지만 파이썬도 배우고 싶어요!"
인쇄(문자열)
string = "자바를 배우고 싶어요!"
함수()
인쇄(문자열)
산출:
자바를 배우려고 합니다!
하지만 나도 파이썬을 배우고 싶다!
하지만 나도 파이썬을 배우고 싶다!
출력에서 볼 수 있듯이 Python은 여기에서 전역 변수를 인식하고 그에 따라 print 문을 평가하여 적절한 출력을 제공합니다.
중첩 함수에서 전역 변수 사용
이제 중첩된 함수에서 전역 변수를 사용하면 어떻게 되는지 살펴보겠습니다. '언어' 변수가 다양한 범위에서 정의되고 사용되는 이 예를 확인하십시오.
프로그램:
def 함수():
언어 = "영어"
def func1():
글로벌 언어
언어 = "스페인어"
print("func1을 호출하기 전: " + 언어)
print("지금 func1 호출 중:")
함수1()
print("func1 호출 후: " + 언어)
함수()
print("메인 언어의 값: " + 언어)
산출:
func1을 호출하기 전에: 영어
지금 func1 호출:
func1 호출 후: 영어
주요 언어의 가치: 스페인어
보시다시피 전역 키워드는 중첩된 func1 내에서 사용될 때 상위 함수의 변수 '언어'에 영향을 미치지 않습니다. 즉, 값은 "English"로 유지됩니다. 이것은 또한 func()를 호출한 후 'Spanish' 값을 갖는 모듈 네임스페이스에 'language' 변수가 존재함을 보여줍니다.
이 발견은 우리가 이전 섹션에서 알아낸 것과도 일치합니다. 즉, 변수는 함수 본문 내부에 정의될 때 달리 지정되지 않는 한 항상 지역적입니다. 그러나 다른 범위에 속하는 변수에도 액세스할 수 있는 메커니즘이 있어야 합니다.
그것이 nonlocal 변수가 들어오는 곳입니다!
비로컬 변수
비지역 변수는 Python3에서 도입한 새로운 종류의 변수입니다. 이것들은 전역 변수와 공통점이 많고 매우 중요합니다. 그러나 비지역 변수와 전역 변수의 한 가지 차이점은 비지역 변수를 사용하면 모듈 범위에서 변수를 변경할 수 없다는 것입니다.
이를 이해하려면 다음 예를 확인하십시오.
프로그램:
def 함수():
글로벌 언어
인쇄(언어)
언어 = "독일어"
함수()
산출:
독일 사람
예상대로 프로그램은 '프랑크푸르트'를 출력으로 반환합니다. 이제 'global'을 'nonlocal'로 변경하고 어떤 일이 일어나는지 살펴보겠습니다.
프로그램:
def 함수():
비현지어
인쇄(언어)
언어 = "독일어"
함수()
산출:
파일 “<ipython-input-9-97bb311dfb80>”, 2행
비현지어
^^
SyntaxError: 로컬이 아닌 '언어'에 대한 바인딩을 찾을 수 없습니다.
보시다시피 위의 프로그램은 구문 오류를 발생시킵니다. 여기에서 비로컬 할당은 중첩 함수의 정의에서만 수행할 수 있음을 이해할 수 있습니다. 비지역 변수는 함수의 범위 내에서 정의되어야 하며 그렇지 않은 경우 중첩 범위에서도 정의를 찾을 수 없습니다. 이제 다음 프로그램을 확인하십시오.
프로그램:
def 함수():
언어 = "영어"
def func1():
비현지어
언어 = "독일어"
print("func1을 호출하기 전: " + 언어)
print("지금 func1 호출 중:")
함수1()
print("func1 호출 후: " + 언어)
언어 = "스페인어"
함수()
print("메인의 '언어': " + 언어)
산출:
func1을 호출하기 전에: 영어
지금 func1 호출:
func1 호출 후: 독일어
기본 '언어': 스페인어
위의 프로그램은 func1()을 호출하기 전에 'language' 변수가 정의되었기 때문에 작동합니다. 정의되지 않은 경우 아래와 같은 오류가 발생합니다.
프로그램:
def 함수():
#언어 = "영어"
def func1():
비현지어
언어 = "독일어"
print("func1을 호출하기 전: " + 언어)
print("지금 func1 호출 중:")
함수1()
print("func1 호출 후: " + 언어)
언어 = "스페인어"
함수()
print("메인의 '언어': " + 언어)
산출:
파일 “<ipython-input-11-5417be93b6a6>”, 4행
비현지어
^^
SyntaxError: 로컬이 아닌 '언어'에 대한 바인딩을 찾을 수 없습니다.
그러나 nonlocal을 global로 바꾸면 프로그램이 잘 작동합니다.
프로그램:
def 함수():
#언어 = "영어"
def func1():
글로벌 언어
언어 = "독일어"
print("func1`을 호출하기 전: " + 언어)
print("지금 func1 호출 중:")
함수1()
print("func1 호출 후: " + 언어)
언어 = "스페인어"
함수()
print("메인의 '언어': " + 언어)
산출:
func1을 호출하기 전에: 영어
지금 func1 호출:
func1 호출 후: 독일어
기본 '언어': 독일어
위의 프로그램에서 전역변수(언어)의 값도 변하고 있다는 사실을 눈치채셨을 겁니다! 그것이 nonlocal 변수가 가져오는 힘입니다!
결론적으로
이 기사에서 우리는 Python의 지역, 전역 및 비지역 변수와 다양한 사용 사례 및 주의해야 할 가능한 오류에 대해 논의했습니다. 이 지식을 옆에 두고 계속해서 다양한 종류의 변수로 연습을 시작하고 미묘한 차이를 알아차릴 수 있습니다.
Python은 전 세계적으로 매우 인기 있는 프로그래밍 언어입니다. 특히 데이터 관련 문제 및 과제를 해결할 때 그렇습니다. upGrad에는 전 세계적으로 40,000명 이상의 유료 학습자가 있는 85개 이상의 국가에 학습자 기반이 있으며 우리 프로그램은 500,000명 이상의 실무 전문가에게 영향을 미쳤습니다. 우리의 데이터 과학 및 기계 학습 과정은 배경에 관계없이 의욕적인 학생들이 여정을 시작하고 데이터 과학 분야에서 두각을 나타낼 수 있도록 설계되었습니다. 우리의 360도 경력 지원은 일단 등록하면 경력이 상승할 수 있도록 보장합니다. 지금 연락하여 동료 학습 및 글로벌 네트워킹의 힘을 경험하십시오!
범위에 따라 Python의 변수는 지역, 전역 또는 비지역입니다. 예, 전역 변수는 Python의 함수 내에서 액세스할 수 있습니다. 전역 변수는 전체 프로그램을 범위로 갖는 반면 지역 변수는 범위로 정의된 기능만 갖습니다.파이썬에서 변수의 유형은 무엇입니까?
함수 내에서 Python의 전역 변수에 액세스할 수 있습니까?
지역 변수와 전역 변수의 차이점은 무엇입니까?