프로그래밍/Python

Python-6) 함수, 모듈, 패키지 : Python, Python 설치, 파이썬 마스터

LeeSeunghyuk 2020. 11. 11. 21:37
반응형

안녕하세요 이승혁입니다.

 

이번 시간에는 파이썬에서의 함수와, 모듈, 그리고 패키지에 대해 학습을 진행해 보도록 하겠습니다~


 

함수(def)

 

   함수란 특정 목적을 가진 코드의 집합이며 독립적으로 호출될 수 있는 것을 말합니다.

 

※ 함수를 프로그래밍할 때 꼭 명심해야 할 사항 ( 권고사항 )

  1. 함수는 기능이 가급적 하나이면서 코드를 심플하게 작성해야 합니다/
  2. 함수는 재사용이 가능해야 합니다.

※ 함수 생성하는 방법

 

def 함수명(변수1,변수2...):

    수행 코드

    return 반환값

 

 

변수1, 변수2처럼 함수에 넘겨주는 변수를 입력 매개변수라고 합니다

#함수 생성하기
def add_number(num1,num2):
    result=num1+num2
    return result

#함수 사용해보기
hap=add_number(5,10)
print(hap)

 

오라클 내장 함수                             vs                           파이썬 내장 함수

      upper                                                                         upper()

      lower                                                                          lower()

      initcap                                                                      직접 생성

      substr                                                                       직접 생성

      replace                                                                      replace

  length                                                                         len

        rtirm/ltrim                                                                   rstrip()/lstrip()

      rpad                                                                         직접 생성

      lpad                                                                          직접 생성

      instr                                                                          직접 생성

      round                                                                        round()

      trunc                                                                          trunc()

      mod                                                                              %

      power                                                                          pow

      to_char                                                                         str

      to_number                                                                   int,float

            to_date                                                         datetime.strptime()

      nvl                                                                              직접 생성

      decdoe                                                                           if

      case                                                                               if

 

실습 2. 오라클의 initcap 함수 만들어보기

def initcap(string):
    result=string[0].upper()+string[1:].lower()
    return result

name='SCOTT'
print(initcap(name))

 

실습 3. 오라클의 substr 함수 만들어보기

def substr(string,n1,n2):
    result=string[n1-1:n2]
    return result

print(substr(name,1,3))

 

※ 함수의 인자 이해하기

 

     인자의 기본값(default)을 설정할 수 있으며, 따로 인자를 넘겨주지 않으면 기본값을 사용합니다.

 

def make_sentence(s1,s2='최고'):
    return s1+' '+s2

print(make_sentence('파이썬'))
print(make_sentence('파이썬','자바'))

처음 사용한 함수에는 인자를 하나만 전달하여 s2인자의 기본값인 '최고'를 그대로 사용하였다.

두 번째 사용한 함수에는 '파이썬', '자바' 두 개의 인자를 전달하여 기본값이 아닌 두 번째 인자 '자바'를 사용했다.

 

※ 변수 이해하기 (지역변수 , 전역변수)

 

    변수는 자신이 생성된 범위(코드블럭) 안에서만 유효하다.

    함수 에서 만든 변수는 함수 안에서만 살아있다가

    함수 코드의 실행이 종료되면 그 생명을 다한다.

    이것을 '지역변수' 라고 한다.

 

    이와는 반대로 함수 외부에서 만든 변수는 프로그램이 살아있는 동안에

    함께 살아있다가 프로그램이 종료되면 같이 소멸된다.

    이렇게 프로그램 전체를 유효범위로 가지는 변수를 '전역변수'라고 한다.

strdata='전역변수'
def func1():
    strdata='지역변수'
    return strdata

print(strdata)
print(func1())

변수의 이름은 같지만, 함수안에서 선언된 strdata는 그 함수를 선언한 구문에서만 strdata='지역변수'의 역할을 한다.

 

반대로 전역변수로 선언한(함수 밖) strdata 변수는 프로그램 어디서 사용하던 strdata='전역변수'의 역할을 한다.


ㆍ모듈(module)

 

 

     파이썬에서는 각각의 소스파일을 일컬어 모듈이라고 합니다.

     이미 만들어져 있고 안정성이 검증된 함수들을 성격에 맞게 하나의 파일로 묶어놓은 을 모듈이라고 한다.

     외부의 모듈에 있는 함수를 사용하려면 이 모듈을 먼저 우리 코드로 가져와서

     자유롭게 사용할 수 있도록 해야하는데 이런 일을 파이썬에서는 모듈을 IMPORT 한다고 합니다.

 

※ 모듈 만들어보기

 

위에서 만든 initcap 함수, substr 함수를 sh_tistory 모듈로 만들어 보겠습니다.

 

1. 모듈 저장 위치 확인하기

import sys
print(sys.path)

현재 시스템의 경로가 저장되어있는 리스트라고 생각하시면 됩니다.

해당 경로에 모듈을 저장하면 디렉토리를 이동하지 않아도 import 할 수 있습니다.

sys.path 

모듈을 찾을 때 참조하는 경로를 나타낸다.
리스트 구조(string)이며, sys.path에 자기가 만든 모듈이 들어가있다면 모듈이 저장된 디렉터리로 이동할 필요 없이

(내가 만든 모듈이나 패키지는 현재 디렉터리에 있는 것만 불러오기 때문) 바로 불러서 사용할 수 있다.

sys.path를 이용하여 모듈 검색 경로를 바꿔, 모듈들의 부르기 순서를 바꿀 수 있다.

sys.path의 site-packages폴더에는 pip로 설치한 파이썬패키지가 들어간다.

 

Jupyter notebook

첫 화면에서 보이는 경로에 추가해도 됩니다.

 

코드를 실행하여 경로를 확인합니다.

빨간색으로 표시한 경로 아래에 저장하겠습니다.

 

 

 

2. 모듈 작성하고 저장하기

 

메모장에 위에서 만든 함수를 작성하고 sh_tistory.py로 저장합니다.

파일 형식은 모든파일로 바꾸어주고 저장합니다.

 

3. 확인하기

 

커널을 재시작(Restart)한 후 모듈을 임포트 해봅니다.

코드는 다음과 같습니다.

import sh_tistory
print(sh_tistory.initcap('LEEseungHYUK'))

함수만을 import 하면 앞에 모듈이름을 써주지 않아도 됩니다.

from sh_tistory import initcap
print(initcap('LEEseungHYUK'))

 

첫 번째 경우는 모듈 전체를 임포트 했기 때문에 어떤 함수를 사용할지 모듈 이름과 함수명으로 나타내 주어야 하고,

두 번째 경우는 모듈안의 특정 함수만 임포트 했기 때문에 모듈명을 따로 명시해 주지 않아도 됩니다.

 


ㆍ 패키지(package)

 

     음악 파일을 장르별로 저장하는 것 처럼, 모듈도 기능별로 모아둔 것을 패키지라고 합니다.

 

※ 패키지 만들기

 

1. 위의 경로 (c:\\사용자\\User) 안에 my_loc 폴더를 생성합니다.

2. 생성한 폴더 안으로 sh_tistory.py 모듈을 옮겨넣습니다.

   c:\\사용자\\User\my_loc

                                  |

                                  sh_tistory.py

3. 지금까지는 평범한 폴더이므로, 패키지로 인정받기 위한 파일을 생성합니다.

   파일명 : __init__.py <- 언더스코어( _ )2개, init , 언더스코어 2개 . py

   c:\\사용자\\User\my_loc

                                  |

                                  sh_tistory.py

                                  __init__.py

 

   똑같이 메모장으로 만들면 되고(파일형식-모든파일) 안에는 비워두시면 됩니다.

 

4. 확인하기

   커널 재시작합니다.

from my_loc import sh_tistory
print(sh_tistory.initcap('LEEseungHYUK'))

 

 

5. __init__.py 의 내용을 채울경우

    my_loc폴더에 다른 모듈이 생길 경우에 채워 넣습니다.

ex) 

   c:\\사용자\\User\my_loc

                                  |

                                  sh_tistory.py

                                  __init__.py

                                  sh2.py

                                  sh3.py

   두 개의 모듈(sh2,sh3)을 추가로 만들어서 패키지로 묶을 경우에 __init__ 파일을 다음과 같이 채워 넣습니다.

 

   __all__ = ['sh_tistory', 'sh2', 'sh3']

 

   위의 경우 from my_loc import * 코드를 통해 세 개의 모듈을 한 번에 임포트할 수 있습니다.

 

 

이번 실습은 여기까지 진행하고 다음 포스팅에서는 모듈 임포트에 대해 조금 더 이해할 수 있는 시간을

가져보도록 하겠습니다.

 

읽어주셔서 감사합니다.

 

 

반응형