파이썬 중급(2) 1일차 리뷰

김영목·2021년 9월 6일
0

파이썬중급

목록 보기
18/18

수업진도 : chapter 1-1
오늘부터 인프런 파이썬 level3에 대해서 리뷰한다. 고고~~


#오늘의 학습내용은 variable scope이다.

우선 코드를 보면서 리뷰해보자. 

a = 20 
# 우리가 보통 변수를 선언하는 방식이다.
# 여기서 이러한 변수를 클래스 혹은 함수 외부에서 선언하면 해당 변수는 전역변수가 된다. 

# 여기서 주의할 점이 있다. 
# 예제 1
def my_love_py() :
    a = 30
    print(a)
    
위처럼 함수를 정의하고 my_love_py로 호출하면 전역변수의 값이 함수에 의해 변하여 30이 출력된다. 

# 예제 2
a = 30
def my_py_py() :
	a += 10
	print(a)

위의 코드를 실행시키면 어떻게 될까??
변수할당에 에러가 발생한다. 그 이유는 변수 a가 
이미 할당되어 있고 지역변수가 아니기 때문이다. 

# 그래서 이러한 문제를 해결하기 위해 
global a <= 이런식으로 변수 a가 전역변수임을 선언한다.
# 처음 개발 이후 수정되는 프로그램들의 특성상 전역변수를 중간에 값을 바꾸는 것은 
# 코드를 예측하는 데 있어 방해가 될 수 있다.

# 중첩함수에서의 변수

def outer():
    e = 70

    def inner():
        # 로컬 안에 또다른 로컬에서 지역변수를 수정하기 위해서.
        nonlocal e
        e += 10  # e = e + 10
        print('Ex5 > ', e)
    return inner

전역변수와 그것을 보는 함수 globals

만약에 우리가 어떤 파일에 다음과 같이 코드를 작성하고 print(globals())라고 출력하면 어떤 값이 나올까???


a = 20

def funk1() :
	return 'print is fuck'
    
b = 30

def b_change(var) :
	global b
    b = b + var
 	return b
    
def first_func(args):
	c = [x for x in args]
    def second_func() :
        nonlocal c
    	my_calculate = len(c) **2
        print(my_calculate)
    return second_func()

x = 20

print(globals())를 하면 아마 아래와 같은 사전형태의 결과물을 볼 수 있다. 

{'__name__': '__main__', '__doc__': '\nChapter 1\nPython Advanced(1) - Python Variable Scope\nKeyword - scope, global, nonlocal, locals, globals..\n\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002670EB76CD0>, '__spec__': None, '__annotations__': {}, 
'__builtins__': <module 'builtins' (built-in)>, '__file__': 'c:\\Users\\ddusa\\OneDrive\\바
탕 화면\\coding\\python practice(high)\\수업자료\\예제파일\\py_ad_1_1.py', '__cached__': None, 'a': 10, 
'foo': <function foo at 0x000002670F0AB3A0>, 'b': 20, 'bar': <function bar at 0x000002670F0AB430>, 'c': 40, 'foobar': <function foobar at 0x000002670F0AB4C0>, 'd': 
60, 
'barfoo': <function barfoo at 0x000002670F0AB550>, 'outer': <function outer at 0x000002670F0AB5E0>, 'in_test': <function outer.<locals>.inner at 0x000002670F0AB670>, 'func': <function func at 0x000002670F0AB700>}


# 마지막으로 지역변수를 전역변수로 추가하고 싶다면 어떻게 할까?????

# 예시 3.

for i in range(1, 10) :
    for k in range(1,10) :
    	globals()['{i} * {k}] = i * k
        
print(1*1) = 1
    	
profile
안녕하세요 김영목입니다.

0개의 댓글