- 지역변수와 전역변수
- 지역변수(local variable): 함수 안에서 선언되는 변수
- 전역변수(global variable): 함수 외부에서 선언되는 변수
name = 'simon'
def my_name():
name = 'kihun'
print(name)
my_name() # 결과: kihun
print(name) # 결과: simon
my_name() 함수 내부에서 선언된 name변수는 함수를 호출하였을때, ‘kihun’이라는 이름을 출력하지만 지역변수이므로 함수 외부에서의 print(name)에는 영향을 미치지 않는다.
print(name) 함수는 전역변수로 선언된 name = ‘simon’의 ‘simon’을 출력하고 있다.
만약, 함수 내부에서 선언된 name 변수가 전역변수로 사용되기 위해서는 global 키워드를 작성하여 전역변수로 사용할 수 있다.
def my_name():
global name # 전역변수로 사용
name = 'simon'
my_name()
print(name)
아래와 같이 함수를 중첩하여 사용한 경우를 보자. 이때, 함수 c()에서 사용되는 x 변수는 nonlocal로 선언하여 바로 상위 scope의 b() 함수에서 선언된 x = 20에 따라서 연산되었다. 이처럼 global과 nonlocal을 사용하여 scope에 따라 변수를 사용할 수 있다.
def a():
x = 10
y = 100
def b():
x = 20
def c():
nonlocal x
nonlocal y
x = x + 30
y = y + 300
print(x)
print(y)
c()
b()
a()
# 결과
# 50
# 400
추가) 인스턴스 변수(instance variable): 클래스 안에서 선언되는 변수로 앞에 self를 사용
- 클로저(Closure): 외부 함수에 접근할 수 있는 내부 함수 혹은 이러한 원리를 말함
- 함수를 클로저 형태로 만드는 방법
def my_func():
name = 'simon'
def hello():
print('hello,', name)
return hello
my_func()() # 결과: hello, simon
클로저 형태 예시
def times_multiply(n):
def multiply(x):
return n * x
return multiply
times_3 = times_multiply(3)
times_4 = times_multiply(4)
del times_multiply
print(times_3(5)) # 결과: 15
print(times_4(5)) # 결과: 20
위의 times_3, times_4와 같이 클로저 형태를 사용하여 프로그램의 흐름을 변수에 저장하면 del로 times_multiply() 함수를 삭제해도 사용하고 싶을 때 사용할 수 있게 된다. 또한 클로저 내의 지역변수는 외부에서 직접 접근할 수 없다.
클로저 관련 참고: https://dojang.io/mod/page/view.php?id=2366
'[Python] 연습' 카테고리의 다른 글
[Python] enumerate () 함수 (0) | 2022.06.30 |
---|---|
Mac에서 Python venv 가상환경 생성 (0) | 2022.06.09 |
[Python] 클래스와 상속 (0) | 2022.05.27 |
[Python] 결측값 처리하기(dropna) (0) | 2022.03.27 |
[Python] Series (0) | 2022.03.26 |