Programming Tools/Python_파이썬

파이썬의 모든 변수는 지역변수이다.

LiDARian 2020. 9. 26. 17:20
반응형
1. 파이썬의 변수의 특성?

 

C언어에서 변수를 선언하면 그 위치에 따라 지역변수인지 전역변수인지 나뉜다.

C언어를 먼저 익힌 필자로선 다른 언어도 마찬가지인 줄 알았다. 하지만 파이썬은 달랐다. 파이썬의 모든 변수는 지역변수였다.

예시를 보자.

a = ["tom", "jerry", "mike"]
jjak = []
n = 0 

def findjjak(lst):
	for i in range(0,len(lst)-1):
		for j in range(i+1, len(lst)):
			n = n + 1
			jjak.append(a[i] + '-' + a[j])
	return jjak 

print(findjjak(a))
print(n)



이걸 그대로 실행하면 이런 에러가 뜬다.

UnboundLocalError: local variable 'n' referenced before assignment

UnboundLocalError는 보통 선언된 변수의 scope에 문제가 있을 때 발생하는 에러다.

 

2. 해결방법

어떻게 해결해야하나?

크게 두가지 방법이 있다.

1. 전역변수로 사용하도록 선언

 

a = ["tom", "jerry", "mike"]
jjak = []
n = 0 

def findjjak(lst):
	global n 
	for i in range(0,len(lst)-1):
		for j in range(i+1, len(lst)):
			n = n + 1
			jjak.append(a[i] + '-' + a[j])
	return jjak 

print(findjjak(a))
print(n)

 

정의되는 함수 밖에 변수를 선언한다. 그 후 사용하고자 하는 함수 안에서 'global n'으로 전역변수로 사용할 것이라고 선언하면 된다.

2. 변수 선언의 위치와 호출 방법을 바꾼다.

a = ["tom", "jerry", "mike"]

def findjjak(lst):
    jjak = []
    n = 0
    for i in range(0,len(lst)-1):
        for j in range(i+1, len(lst)):
            n = n + 1
            jjak.append(a[i] + '-' + a[j])
    print(n)
    return jjak

print(findjjak(a))

참고 문헌

thebook.io/006888/partxt/xa/07/

반응형