인프런 리프 - 파이썬 고급 week01

pyhoo·2021년 3월 14일
0

Inflearn Leaf 2nd

목록 보기
5/5
post-thumbnail

인프런 리프의 파이썬 고급과정 1주차 복습 포스팅입니다.

Variable Scope

전역변수와 지역변수의 기준은 '함수'입니다. 함수 내부에서 선언되었느냐, 혹은 밖에서 선언됐느냐에 따라 전역/지역의 기준이 됩니다.

  • 지역변수: 함수 내부에서 선언된 변수로, 함수 호출이 종료될 때 함께 없어진다.
  • 전역변수: 이와 달리 전역변수는 어떠한 함수에 종속되지 않고 지속적으로 할당된 값을 유지한다.
d = 50
def barfoo():
    global d
    d = 5
    d += 10
    print("ex 4 > ", d)
print('ex 4 >> ', d) # 50
barfoo()
>>> ex 4 >>  50
>>> ex 4 >  15
클로저로 배워보는 전역, 지역 변수
def outer():
    e = 70 # 파이썬 클로져
    def inner():
        # e += 10 # 상위의 e를 그냥 가져다 쓰지 못한다.
        nonlocal e
        e += 10
        print('Ex 5 > ', e)
    return inner
in_test = outer() 
# closure --> outer()함수 리턴하여 in_test변수에 저장 --> 곧 바로 inner()함수 호출
# 결과적으로 in_test에는 inner()함수 가 호출되어 할당된 상태
in_test()
in_test()
in_test()
# in_test() 함수를 계속 사용하면 값을 누적하여 더한다.
>>> Ex 5 >  80
>>> Ex 5 >  90
>>> Ex 5 >  100
  • global: 지역변수를 전역변수에 영향을 줄 수 있도록 캐스팅하는 명령어
  • nonlocal: 지역변수가 아님을 선언, nonlocal 명령어가 사용된 함수 바로 바깥 스코프의 변수와 바인딩
global 선언을 자제하자, 코드 유지보수에서 좋지 않아. 아예 쓰지 말자는 말은 아니다.
# ex 6
def func(var):
    x = 10
    def printer():
        print('ex 6', 'printer func inner')
    print('func inner: ', locals()) 
    # locals()라는 함수안에, printer라는 함수와 var, x변수가 딕셔너리 형태로 저장돼있음을 볼 수 있다.
func('hi')
# locals() 메서드가 리턴되면서 아래 'func inner:' 이하의 내용을 리턴
>>> func inner: {'var': 'hi', 'x': 10, 'printer': <function func.<locals>.printer at 0x10e362160>}
# ex 7
print('ex 7', globals())
globals()['test_variable'] = 100 # globals 딕셔너리에 'test_variable'이란 변수를 할당
print('ex 7', globals())
>>> # globals() 딕셔너리의 기존에 있던 값과 'test_variable':100이 key-value로 추가된다.
# ex 8 ( local -> global variable generate)
for i in range(1, 10):
    for k in range(1, 10):
        globals()['plus_{}_{}'.format(i, k)] = i + k
print(globals()) # globals() dictionary에 위의 이중for문으로 key-value할당
# 재밌는 사실은 plus_5_5는 key값 처럼 저장됐지만, globals()에 저장됐기에, plus_5_5만으로 value를 리턴할 수 있다.
print('Ex 8 > ', plus_5_5) # unresolved reference라고 뜨지만, 작동은 한다.

# 전역변수는 변하지 않는 고정 값에 사용 --> 함수형 프로그래밍에 자주 사용
# 지역변수 사용 이유: 지역변수는 함수 내에 로직 해결에 국한, 소멸주기 : 함수 실행 해제 시
# 전역변수를 지역내에서 수정는 것은 권장 x

모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)

0개의 댓글