728x90
함수 선언
함수 안에 함수를 선언하는 방법은 그냥 안에 선언해 주면 된다.
def 함수이름1():
코드
def 함수이름2():
코드
def add_num():
a = 1
b = 2
def add():
return a+b
print(add_num())
print(add()) # 에러 발생
None
def add_num():
a = 1
b = 2
def add():
return a+b
return add()
print(add_num())
3
add 함수는 add_num 안에 있기 때문에 직접적으로 접근하지 못하고 add_num()을 통해 접근해야 한다.
지역 변수
각 함수의 지역 변수 접근 범위는 아래와 같다. add는 add_num의 변수에 접근할 수 있지만 add_num은 add의 변수에 접근할 수 없다.
def A():
a = 10 # A의 지역변수 a
b = 20 # A의 지역변수 b
def B():
b = 15 # b에 15 할당
print(b)
return a+b
print(B())
return a, b # A의 지역변수 a, b
print(A())
15
25
(10, 20)
nonlocal
A의 지역변수 b를 B에서 변경하고 싶다면 nonlocal 키워드를 사용하면 된다.
nonlocal은 함수 밖의 지역 변수를 사용하겠다는 의미이다.
def A():
a = 10
b = 20
def B():
nonlocal b
b = 15
print(b)
return a+b
print(B())
return a, b
print(A())
15
25
(10, 15)
순서
이런 단계적 함수 사용은 자주 쓰지 않고 함수마다 같은 이름의 변수를 사용하는 것을 좋지 않다. 최대한 변수 이름 다르게 지어주자...!
nonlocal은 해당 함수의 가까운 함수부터 탐색한다.
def A():
a = 10
b = 20
def B():
b = 100
def C():
nonlocal a
nonlocal b
a += 10
b += 15
print(b)
return a+b
print(C())
B()
return a, b
print(A())
115
135
(20, 20)
global
몇 단계가 겹쳐있는 global 키워드를 사용하면 전역변수를 사용할 수 있다.
아래의 코드에서 nonlocal b 대신 global b를 사용하면 전역변수 b가 없기 때문에 에러가 발생한다.
*전역변수란 함수 밖에서 선언된 변수로 함수 실행이 끝남과 동시에 사라지는 지역 변수와 다르게 늘 존재한다.
a = 100
def A():
a = 10
b = 20
def B():
b = 100
def C():
global a
nonlocal b
a += 10
b += 15
print(b)
return a+b
print(C())
B()
return a, b
print(A())
115
225
(10, 20)
728x90
'Python > 이론, 기초' 카테고리의 다른 글
pandas, github에 있는 데이터 파일 가져오기 (0) | 2024.04.08 |
---|---|
리스트형태의 문자열을 리스트로 만들기 (0) | 2024.01.16 |
[Python] defaultdict, dict의 자료형을 알고 있을 때 자동으로 생성 (0) | 2023.05.04 |
[Python] 리스트에서 원하는 원소 추출, 리스트 필터링 (0) | 2023.05.02 |
[Python] map에서 lambda 쓰기 (0) | 2023.05.01 |