TIL,WIL(일간,주간 회고)

2022.12.07 TIL 파이썬 전역변수 선언방법,사용방법

worldint 2022. 12. 8. 13:56

-상황설명:

클라이언트에서 서버로 데이터를 보내주고 그것을 DB에 넣는 작업중,

서버에서 count라는 변수를 하나씩올려서 DB에 넣어줄때 카운트값도 같이 넣어주고 싶었다.

{

name: jin

age: 12

count:1

}

{

name: kim

age: 22

count:2

}

이런식으로 말이다.

 

처음에 썻던 방법은 지금 디비에있는 딕셔너리가 몇개인지

count = len(list(db.find({})))

이렇게 가져와서 그 갯수 +1을 해줘서 카운트 값을 매겼었다

근데 그렇게하니까 디비의 딕셔너리 하나를 지우면 예를들어 count가 1,2,3 이렇게 커지고 있는데 1을 지우면 2,3이 남게된다.

-문제점:

그럼 그다음에 디비에 들어오는 딕셔너리에 count 4가 되어야되는데 3이들어간다

왜냐면 로직을 현재 디비에 들어있는 데이터 갯수를 기준으로 count를 하게 짯기 떄문이다.

디비에 두개가 들어있으니까 그다음에 오는건 count=3 이런식으로했기때문에

 

 

-해결방법:

count를 디비에 들어있는 데이터갯수를 기준으로 하지말고

전역변수로 count를 만들어주고 그 변수값을 디비에 넣어주는 함수가 실행될때마다

1씩 커지게 하고 그걸 디비에 같이 들어가게 해주었다.

 

만든방법은 전역변수를 써서 만들었다

아래는 전역변수 사용방법이다

global a
a = 10

def test():
    global a
    a = 3
    b = 2

    return a + b
print(test())
print(a)                      

#결과는 5,3이 출력된다

파이썬은 위와같이 

global 변수

변수 = 넣고싶은 데이터

이렇게 해줘야 되는거같다

global 변수 = 넣고싶은 데이터

이렇게 한번에 안된다(적어도 내 개발환경에서는)

 

그리고 함수안에서도

global 변수

변수 = 넣고싶은 데이터

다시 이런식으로 해줘야 전역변수에 영향을 미칠수있다.