전역 변수
- 함수를 포함하여 스크립트 전체에서 접근할 수 있는 변수
지역 변수
- 변수를 만든 함수 안에서만 접근할 수 있고, 함수 바깥에서는 접근할 수 없음.
x= 10 #전역 변수
def foo():
x = 20 # 지역 변수
print(x)
foo( ) #20 #지역 변수 출력
print(x) #10 #전역 변수 출력
global 키워드
- 함수 안에서 전역변수의 값을 변경하거나 생성할 수 있음.
x = 10
def foo( ):
global x
x = 20 #전역변수 값 변경
print(x)
foo( ) #20
print(x) #20
---------------------------
def foo ( ):
global x
x = 20 #전역변수 값 생성
print(x)
foo( ) #20
print(x) #20
컨테이너 자료형
딕셔너리, 리스트, 튜플, 세트
- mutable: 딕셔너리, 리스트, 세트
- immutable: 튜플
- sequence: 리스트, 튜플
- non-sequence: 딕셔너리, 세트
리스트의 메서드
리스트.append(값): 리스트의 뒤에 값을 추가함.
리스트.remove(값): 리스트에서 값을 제거함.
리스트.pop(인덱스 번호): 리스트에서 해당 인덱스에 위치한 값을 제거함.
딕셔너리의 메서드
딕셔너리.pop(키): 딕셔너리에서 해당 키와 value를 제거함.
- 딕셔너리에 for 루프문을 사용하면 기본적으로 key만 뽑아옴.
conductor = {'first_name': '단테', 'last_name': '안'}
for key in conductor:
print(key)
>>> first_name
>>> last_name
- 딕셔너리.items()을 통해 key와 value 둘다 뽑아올 수 있음.
conductor = {'first_name': '단테', 'last_name': '안'}
for key, value in conductor.items( ):
print(key + ' : ' + value)
>>> first_name : 단테
>>> last_name : 안
중첩 함수
- 바깥쪽 함수의 지역변수는 모든 안쪽 함수에서 접근할 수 있음.
def print_hello():
hello = 'Hello, world!'
def print_message():
print(hello) # 바깥쪽 함수의 지역변수를 사용함
print_message()
print_hello()
>>> Hello, world!
------------------------
def A( ):
x=10
def B( ):
x=20
B( )
print(x)
A()
>>> 10
------------------------------
- 현재 함수의 바깥쪽에 있는 지역 변수의 값을 변경하려면 nonlocal 키워드를 사용하면 됨.
( 현재 함수의 바깥쪽에 있는 지역변수를 찾을때 가장 가까운 함수부터 먼저 찾음. )
def A( ):
x=10
def B( ):
nonlocal x
x=20
B( )
print(x)
A()
>>> 20
클로저 (closure)
- 함수를 둘러싼 지역변수 및 코드를 계속 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수
- 프로그램의 흐름을 변수에 저장할 수 있음.
- 지역변수와 코드를 묶어서 사용하고 싶을 때 활용함.
def calc( ):
a=3
b=5
def mul_add(x):
return a*x+b
return mul_add #괄호를 붙이지 않고, 함수명만 반환함.
c = calc( ) #클로저
print(c(1), c(2), c(3), c(4), c(5))
>>> 8 11 14 17 20
------------------------------------
def calc( ):
a=3
b=5
return lambda x: a*x+b