관리 메뉴

bright jazz music

220326 전역변수와 지역변수 & 모듈 구성 및 사용(주사위) 본문

Language/python

220326 전역변수와 지역변수 & 모듈 구성 및 사용(주사위)

bright jazz music 2022. 3. 26. 10:11
#작업대 위의 함수는 호출부로 복귀할 때 작업대에서 내려진다.

#지역변수(local variable) :

#   함수 정의와 같은 특정 블록안에서 선언된 변수
#   메모리 할당과 소멸이 자동으로 일어남(따라서 자동할당변수라고도 함)
#       해당 블록치 처리될 때 메모리를 할당 받아 생성됨
#       해당 블록이 끝나면 할당된 메모리를 반납하여 소멸됨.

#   블록 내의 코드가 처리된느 경우에만 가시적
#       해당 블록 안에서만 직접 접근이 가능

#   따라서 함수 안에서 선언된 변수는
#   그 함수가 호출되어 처리되는 동안에만
#       가시적이고
#       접근 가능하다.(그러나 인수를 넣고 반환하는 절차가 필요하다)


#전역변수(global variable) :

#   어떤블록에도 속하지 않게 선언된 변수(함수 내에서 선언되지 않음)

#   메모리 할당과 소멸이 프로그램 시작과 끝과 일치함
#       프로그램이 시작할 때 메모리를 할당 받아 생성됨
#       프로그램이 끝날 때 할당된 메모리를 반납하여 소멸됨

#   프로그램이 진행되는 모든 순간에 가시적
#       어떤 함수에서도 호출 가능
#
#   그러나 메모리 활용 측면에서 비효율적(계속 메모리를 차지)
#   코드의 가독성과 모듈성이 떨어짐
#       전역변수 전역변수를 참조하는 함수  간에 종속성이 생김
#       특정 시점에 그 변수의 값이 어떤 값을 갖는지 확인하기 어려움
#       프로그램이 커지면 더욱 문제가 커짐. 제한적으로만 사용되어야 함.

#전역변수는 프로그램 전반적으로 공유되며 참조될 데이터를 유지하기 위해서만
#제한적으로 사용하자.

r값을 파일로부터 읽어들인다거나 다른 방법으로 인수를 받을 수가 없음. 

 

 

 

 

지역과 전역변수가 같은 이름을 갖는 것은 가능하다. 전역변수 접근은 어디서든 가능하다. 그런데 함수 안에서 전역변수의 값을 바꾸러면 global 키워드를 사용해서 그것이 전역변수를 의미함을 명시해 줄 필요가 있다.

 

global a  ==> 전역변수 a에 접근하겠습니다. 라는 뜻이다.

 

그러나 global을 사용해서 전역변수에 접근하는 것은 전역변수와 함수 간에 종속성을 발생시키므로 사용을 지양하는 것이 좋다.

 

 

#모듈
#   연관된 함수의 정의나 변수들을 모아 재사용 가능하도록
#   독립된 파일로 분리해 구성한 파일
#   다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파일


#현재 실행되는 모듈 확인
#전역변수 __name__
#현재 실행되는 모듈 이름이 자동으로 저장된다



print('현재 모듈: ', __name__)
#현재 모듈:  __main__


#import
#   실행 시 특정 모듈을 현재 모듈로 가져오는 동작
#       해당 모듈 안에 기술된 각종 정의와 문장들을 가져와
#       현재 모듈에서 사용할 수 있게 하는 것

#모듈 이름
#   해당 소스파일 이름에서 확장자 .py를 제거한 것과 같다.
#   대소문자 구분함.

#모듈의 종류
#   1. 표준 모듈: 파이썬에서 제공
#   2. 써드파티 모듈
#   3. 사용자 정의 모듈의 세 종류이다.

 

 

 

#calc_area.py
#도형의 넓이를 구하는 모듈

def get_circle_area(radius):    #원의 넓이
    result = 3.14 * radius**2
    return result

def get_rect_area(width, height): #직사각형의 넓
    result = width * height
    return result

 

 

#import 키워드만 이용해서 지정한 모듈을 가져오기


#   import 모듈이름(.py는 제외)


#대상모듈의 구성요소를 사용하기 위해서는

#   대상모듈이름.사용할_구성요소
#   e.g calc_area.get_circle_area


import calc_area

#주프로그램부

area = calc_area.get_circle_area(10)
print(area) #314.0


area = calc_area.get_rect_area(10, 20)
print(area) #200
#as를 사용하여 alias를 부여할 수 있다.


import calc_area as ca

#주프로그램부

area = ca.get_circle_area(10)
print(area) #314.0


area = ca.get_rect_area(10, 20)
print(area) #200

 

#구성요소 이름으로 가져오기

from calc_area import get_circle_area
from calc_area import get_rect_area

area = get_circle_area(10)
print(area)

area = get_rect_area(10, 20)
print(area)

#마치 우리가 지정한 함수처럼 모듈 식별자를 명시하지 않을 수 있다.
#그러나 구분이 어렵고, 충돌이 일어날 수 있고, 임포트가 줄수가 너무 많아질 수 있다.

#임포트 줄 수가 너무 많아지는 문제는

# from calc_area import *

#를 사용해서 해결할 수 있지만 떄로 예상치 못한 충돌이 일어날 수 있으므로
#사용하지 않는 편이 좋다.
# 그냥 모듈 식별자를명시하는 것이 좋은 듯하다.

 

from calc_area import get_circle_area as getCA
from calc_area import get_rect_area as getRA

area = getCA(10)
print(area)

area = getRA(10, 20)
print(area)

#모듈의 구성요소를 따로 가져와서 alias를 붙여주는 것도 방법이다.
#모듈 전체를 가져오는 것이 너무 부담을 주는 경

 

help('modules') 명렬어를 통해서 파이썬 표쥰 모듈을 확인 가능

 

 

 

 

주사위 모듈

#주사위 시뮬
#import random
from random import randint

def roll_dice():
    return randint(1,6) #시작값, 끝값


#print(roll_dice())
#이렇게 써주면 다른 데서 임포트 했을 때 프린트문까지 포함됨
#따라서 아래의 조건문을 사용해서 import시에는 main함수 내의 내용이
#실행되지 않도록 할 수 있음


def main():
    print(roll_dice())


if __name__ == '__main__' :
    main()

'Language > python' 카테고리의 다른 글

220402 문자열 실습  (0) 2022.04.04
문자열  (0) 2022.04.04
220319 파이썬 과제(연산자 사용, int(), float()사용 )  (0) 2022.03.20
220319 파이썬 연산자  (0) 2022.03.19
파이썬 프로그래밍 220312  (0) 2022.03.12
Comments