TIL | python 모듈

vel.Ash·2022년 4월 6일
0
post-thumbnail

모듈

모듈 사용하는 방법

*같은 폴더 내 모듈 파일 생성 하기
모듈 파일(area.py)

PI = 3.14

def circle(radius):
    return PI * radius * radius

def square(length):
    return length * length

실행파일(run.py)
1-1. 모듈 내 모든 함수 가져오고 싶은 경우

import area

print(area.circle(2))
print(area.square(3))

1-2.모듈 내 모든 함수 가져오고싶은 경우 2

from area import *

print(Square(2))
print(circle(2))
print(PI)

→어느 모듈에서 가져왔는지 명확하지 않고, 쓸데없는 기능까지 가져올 수 있어서 추천하지 않음.

2-1. 일부 함수만 가져오고 싶은 경우

from area import circle, square

print(circle(2))  # 모듈이름 안써줘도 됩니다. 
print(square(3))

2-2.일부 함수만 가져오고 싶은 경우 2

from area import square as sq

print(sq(2))

네임 스페이스

‘dir 함수’

파일안에서 정의된 사용할 수 있는 속성들을 확인 할 수 있음

‘네임 스페이스’

파일안에서 정의된 모든 이름들

from area import circle, square as sq

def square(length):
    return 4 * length

#  dir 함수(area) 넣으면 area내 속성들 확인 가능 
print(dir())
print(square(3))  #  함수 이름이 중복될 때 -> 가장 나중에 정의된 함수의 결과값이 나옴
print(sq(3))
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'circle', 'sq', 'square']
12
9

모듈을 어떻게 불러오냐에 따라서 네임스페이스 안에 저장되는 이름이 다르다. area를 불러오면 모듈 이름인 ‘area’만 저장됨. as로하면 약칭으로 저장됨. → 속성 이름들이 겹치지 않도록 확인 잘해주기~!


파일경로

root
: 파일 시스템의 뿌리 (모든 파일은 루트 안에 있음)
directory
: 폴더
파일 경로
: 컴퓨터에 있는 파일의 정확한 위치

파일 경로 찾기

  • Windows
    : 디렉토리 안을 \로 표기. 예를 들어 folder 디렉토리 안의 file2.py는 folder\file2.py로 표기
    : 루트 디렉토리 안은 하드 드라이브에 따라서 C:\ 혹은 D:\ 로 표기. 하드 드라이브마다 각자의 파일 시스템이 있음
  • macOS
    : 디렉토리 안을 /로 표기. 예를 들어 folder 디렉토리 안의 file2.py는 folder/file2.py 로 표기
    : 루트 디렉토리 안은 /로 표기합니다.

절대 경로

: 루트에서 시작하는 파일의 전체경로

  • Windows:
    : file1.py의 경로: C:\my\file1.py
    : file2.py의 경로: C:\my\folder\file2.py
    : direcotry 디렉토리의 경로: C:\your\directory
  • macOS:
    : file1.py의 경로: /my/file1.py
    : file2.py의 경로: /my/folder/file2.py
    : direcotry 디렉토리의 경로: /your/directory

상대 경로

: 현재위치를 기준으로 다른 파일의 위치를 나타냄
: 항상.(현재 디렉토리 뜻함) 아니면 ..(현재 디렉토리를 포함하고 있는 디렉토리)으로 시작한다.
Windows:

  • my 디렉토리에서 file2.py의 상대 경로: .\folder\file2.py
  • my 안의 folder 디렉토리에서 file2.py의 상대 경로: .\file2.py
  • file1.py에서 file2.py의 상대 경로: .\folder\file2.py (file2.py는 my 디렉토리에 위치해 있기 때문에 . 은 my 디렉토리를 뜻함)
  • file3.txt에서 file4.csv의 상대 경로: .\file4.csv
  • my 안의 folder 디렉토리에서 file1.py의 상대 경로: ..\file1.py
  • file3.txt에서 your 디렉토리 안의 folder 디렉토리: ..\folder

Mac OS:

  • my 디렉토리에서 file2.py의 상대 경로: ./folder/file2.py
  • my 안의 folder 디렉토리에서 file2.py의 상대 경로: ./file2.py
  • file1.py에서 file2.py의 상대 경로: ./folder/file2.py (file2.py는 my 디렉토리에 위치해 있기 때문에 . 은 my 디렉토리를 뜻함)
  • file3.txt에서 file4.csv의 상대 경로: ./file4.csv
  • my 안의 folder 디렉토리에서 file1.py의 상대 경로: ../file1.py
  • file3.txt에서 your 디렉토리 안의 folder 디렉토리: ../folder

모듈 검색 경로

import sys

print(sys.path)   #  파이썬이 모듈을 찾기위해 검색해보는 경로를 보여줌
#  실행한 파일이 있는 폴더부터 시작 -> 나머지 경로들은 파이썬이 디폴트로 찾는 경로들 

모듈 검색 경로에 새로운 경로 추가하기

1.sys.path에 **.**append()로 경로 추가(일회성, 프로그램 종료시 경로 사라짐 )
: sys.path는 결국 리스트이기 때문에 .append 함수로 경로를 추가 할 수 있다.

import sys  
sys.path.append('/Users/codeit/Desktop') # 바탕화면 경로를 추가(macOS)
sys.path.append('C:\\Users\\codeit\\Desktop') # 바탕화면 경로를 추가(Windows)

2.sys.path에 영구적으로 경로 추가
: PyCharm의 설정 (Windows: File → Settings, macOS: PyCharm → Preferences)으로 가서 Project 탭 안에 있는 Project Interpreter를 클릭 → 톱니바퀴 버튼을 누른 후 Show All 옵션을 클릭 → 파일 경로 아이콘을 클릭 → + 아이콘을 누른 후 원하는 경로를 추가 → OK 클릭


스크립트 VS 모듈

스크립트
: 프로그램을 작동시키는 코드를 담은 실행 용도의 파일
모듈
: 프로그램에 필요한 변수들이나 함수들을 정의해 놓은 파일

특수변수 ‘name

<area.py>

print('area 모듈이름: {}'.format(__name__))

PI = 3.14

def circle(radius):
    return PI * radius * radius

def square(length):
    return length * length

# 하단 출력결과가 스크립트에서 출력되지 않도록 조건 지정
if __name__ == '__main__':        
    print(circle(2) ==12.56)
    print(circle(5) ==78.5)
    print(square(2) ==4)
    print(square(5) ==25)

# __name__ -> 모듈의 이름을 저장해놓은 변수, 값은 파이썬에서 알아서 정해줌
# __main__ -> 해당 파일에서 실행하면 main, 다른 파일에서 import해서 쓰면 원래 모듈 이름으로 지정됨
#  만약 area파일을 직접 실행하면 main, 다른 곳에서 불러와서 사용하면 모듈이름인 area로 지정
area 모듈이름: __main__  # 직접 실행해서 main 출력 
True
True
True
True

<run.py>

print('run 모듈이름: {}'.format(__name__))

import area

x = float(input('원의 반지름을 입력해 주세요: '))
print('반지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))

y = float(input('정사각형의 변의 길이를 입력해 주세요: '))
print('변의 길이가 {}인 정사각형의 면적은 {}입니다.'.format(y, area.square(y)))
run 모듈이름: __main__
area 모듈이름: area   #  area파일을 import해서 모듈이름인 area 출력 
원의 반지름을 입력해 주세요:

main()함수

: 어떤 프로그램을 작동시키는 부분을 main 함수 안에 넣어줌
→ 프로그램을 작동시키는 코드가 어디에 있는지 쉽게 알 수 있기 때문에 코드의 가독성이 좋아진다.
따라서 요구되지 않더라도 if __name__ == '__main__'main()을 사용하는 것을 추천
<area.py>

PI = 3.14

# 원의 면적을 구해 주는 함수
def circle(radius):
      return PI * radius * radius  

# 정사각형의 면적을 구해 주는 함수
def square(length):
      return length * length

# 함수들을 테스팅 하는 메인 함수
def main():
      # circle 함수 테스트
      print(circle(2) == 12.56)
      print(circle(5) == 78.4)

      # square 함수 테스트
      print(square(2) == 4)
      print(square(5) == 25)

if __name__ == '__main__':
    main()

<run.py>

import area

# 면적 계산기 프로그램
def main():
        x = float(input('원의 지름을 입력해 주세요: '))
        print('지름이 {}인 원의 면적은 {}입니다.\n'.format(x, area.circle(x)))

        y = float(input('정사각형의 변의 길이를 입력해 주세요: '))
        print('변의 길이가 {}인 정사각형의 면적은 {}입니다.'.format(y, area.square(y)))

if __name__ == '__main__':
    main()
profile
코린이의 개발공부

0개의 댓글