1.변수의 사용 범위 알아보기
- 전역 변수 global variable : 스크립트 전체에서 접근할 수 있는 변수
x = 10 # 전역 변수
def foo():
print(x) # 전역 변수 출력
foo()
print(x) # 전역 변수 출력
- 지역 변수 local variable : 변수를 만든 함수 안에서만 접근
def foo():
x = 10 # foo의 지역 변수
print(x) # foo의 지역 변수 출력
foo()
print(x) # 에러. foo의 지역변수는 출력할 수 없음
1-1.함수 안에서 전역 변수 변경하기
global 전역변수
x = 10 # 전역 변수
def foo():
global x # 전역 변수 x를 사용하겠다고 설정
x = 20 # x는 foo의 지역 변수
print(x) # foo의 지역 변수 출력
foo()
print(x) # 전역 변수 출력
2.함수 안에서 함수 만들기
def 함수이름1():
코드
def 함수이름2():
코드
def print_hello():
hello = 'Hello, world!'
def print_message():
print(hello)
print_message()
print_hello()
2-1.지역 변수의 범위
def print_hello():
hello = 'Hello, world' # 전역 변수
def pirnt_message():
print(hello) # 바깥쪽 함수의 지역 변수를 사용
2-2.지역 변수 변경하기
nonlocal 지역변수
def A():
x = 10 # A의 지역 변수 x
def B():
nonlocal x # 현재 함수의 바깥쪽에 있는 지역 변수 사용
x = 20 # x에 20 할당
B()
print(x) # A의 지역 변수 x 출력
A()
2-3.nonlocal이 변수를 찾는 순서
- nonlocal은 현재 함수의 바깥쪽에 있는 지역 변수를 찾을 때 사용
- 가장 가까운 함수부터 먼저 찾음
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()
2-4.global로 전역 변수 사용하기
- 함수가 몇 단계든 상관없이 global 키워드를 사용하면 무조건 전역 변수 사용
- 가급적 사용하지 않는 것이 좋음
x = 1
def A():
x = 10
def B():
x = 20
def C():
global x
x = x + 30
print(x)
C()
B()
A()
3.클로저 사용하기
- 클로저 : 함수를 들러싼 환경을 계속 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수
- 클로저를 사용하면 프로그램의 흐름을 변수에 저장할 수 있음
- 지역변수와 코드를 묶어서 사용하고 싶을 때 활용
- 클로저에 속한 지역 변수는 바깥에서 직접 접근할 수 없어서 데이터를 숨기고 싶을 때 활용

def calc():
a = 3
b = 5
def mul_add(x):
return a * x + b # 함수 바깥쪽에 있는 지역 변수 a,b를 사용하여 계산
return mul_add # mul_add 함수를 반환
c = calc()
print(c(1), c(2), c(3), c(4), c(5))
3-1.lambda로 클로저 만들기
- 람다 : 이름 없는 함수
- 클로저 : 함수를 둘러싼 환경을 유지했다가 나중에 다시 사용하는 함수
def calc():
a = 3
b = 5
return lambda x: a * x + b # 람다 표현식을 반환
c = calc()
print(c(1), c(2), c(3), c(4), c(5))
3-2.클로저의 지역 변수 변경하기
def calc():
a = 3
b = 5
total = 0
def mul_add(X):
nonlocal total
total = total + a * x + b
print(total)
return mul_add
c = calc()
c(1)
c(2)
c(3)