ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 기초 문법 - 2 (함수와 모듈)
    Programming & Machine Learning/Python X 머신러닝 2017. 7. 27. 02:34

    1. 파이썬의 함수

    1.1 함수 사용 개념

    • 파이썬에서 함수는 정의(def keyword)로 표현.

    • 파이썬에서는 함수를 일급 객체(First Class Object)로 다룸.

    • 일급 객체란 프로그래밍 언어 설계에서 매개변수로 넘길 수 있고 함수가 반환할 수도 있으며 변수에 할당이 가능한 개체를 가리키는 용어

    • 파이썬에서는 함수를 매개변수로도 사용할 수 있고 함수의 결과로 반환하는 것도 가능

    1.2 함수 사용 예제

    ### 다중 리턴과 타입
    def abc(a,b):
        re1 = a+b
        re2 = a-b
        re3 = a*b
        
        return re1,re2,re3
    
    
    def abc2(a,b):
        re1 = a+b
        re2 = a-b
        re3 = a*b
        
        return [re1,re2,re3]
    
    
    def abc3(a,b):
        re1 = a+b
        re2 = a-b
        re3 = a*b
        
        return (re1,re2,re3)
    
    type(abc(3,1)) # tuple return
    abc(3,1)[0]
    
    type(abc2(3,1)) # list return
    abc2(3,1)[0]
    
    type(abc3(3,1)) # tuple return
    abc3(3,1)[0]
    
    
    ### 기본값 매개변수
    def print_string(text, count=1 ): 
        for i in range(count):
            print(text)
            
    print_string("하이욤", 2)
    print_string("하이욤")
    
    
    ### 키워드 매개변수
    def print_personnel(name, position='staff', nationality='Korea'): 
        print('name = {0}'.format(name))
        print('position = {0}'.format(position))
        print('nationality = {0}'.format(nationality))
        
    print_personnel(name='윤기태', nationality='ROK')
    print_personnel('윤기태')
    
    
    ### 가변 매개변수
    # 입력 개수가 달라질 수 있는 매개변수
    # *를 이용하여 정의된 가변 매개변수는 튜플
    # 딕셔너리는 **
    # list처럼 *를 안써줘도 상관 없지만 튜플, 딕셔너리의 특수한 형태로 명시적으로 받고싶을때 사용.
    
    def print_list(lists):
        print(type(lists))
        for k in lists:
            print(k)
            
    a = ['아버지가', '방에', '들어가신다.']
    print_list(a)
    
    def print_tuple(*args):
        print(type(args))
        for k in args:
            print(k)
            
    a = '아버지가', '방에', '들어가신다.'
    print_tuple(a)
    
    def print_team(**players):
        print(type(players))
        for k,v in players.items():
            print(k, v)
            
    print_team(카시야스='GK', 호날두='FW', 알론소='MF', 페페 ='DF')
    
    
    ### 일반 + 가변 매개변수
    def print_args(argc, *argv): 
        for i in range(argc):
            print(argv[i])
            
    print_args(3, "argv1", "argv2", "argv3")
    
    def print_args2(*argv, argc): 
        for i in range(argc):
            print(argv[i])
            
    print_args2("argv1", "argv2", "argv3", argc=3)
    print_args2("argv1", "argv2", "argv3", 3) # error
    # 가변 매개변수 뒤에 정의된 일반 매개 변수는 반드시 키워드 매개변수로 호출 해야 함
    
    
    ### 재귀함수
    def factorial(n):
        if n == 0:
            return 1
        elif n > 0:
            return factorial(n-1)*n
        
    factorial(8)
    
    
    ### 함수와 전역변수
    def scope_test():
        global a # 전역변수 a를 의미함
        a=1 
        print(a)
        
    a = 0
    scope_test()
    a
    
    
    ### 중첩함수
    import math
    def stddev(*args):
        def mean():
            return sum(args)/len(args)
        
        def variance(m):
            total = 0
            for arg in args:
                total += (arg - m ) ** 2
            return total/(len(args)-1)
        
        v = variance(mean())
        return math.sqrt(v)
    
    stddev(2.3, 1.7, 1.4, 0.7, 1.9)
    
    
    ### 구현 보류 함수
    def empty_function():
        pass
    
    class empty_class: 
    	pass

    2. 모듈과 패키지

    2.1 모듈의 개념

    • 모듈은 파이썬 파일 안에 함수, 클래스 등으로 modulation이 되어있는 기능들이 있는 것의 단위를 말한다.
    • 즉, 다른 파이썬 파일에서 작성한 기능들을 module이라는 단위로 관리하며, 불러오는 것이 가능하다는 것.
    • 표준 모듈 : 파이썬과 함께 따라오는 모듈
    • 사용자 생성 모듈 : 프로그래머가 직접 작성한 모듈
    • 서드 파티(3rd Party) 모듈 : 파이썬 재단도 프로그래머도 아닌 다른 프로그래머, 또는 업체에서 제공한 모듈
    • import, from, as, * 등으로 사용한다. 너무 쉬운 내용이므로 생략.
    ### 현재 파일을 기준으로, 모듈을 찾는 working directory 들을 표시함.
    import sys
    for path in sys.path: 
        print(path)

    2.2 메인모듈과 하위모듈

    • 모듈은 메인모듈과 하위모듈로 구분이 가능하다.
    • 어떻게 실행하느냐에 따라 메인모듈이 결정된다.
    • 파이썬의 전역변수인 __name__은, 메인모듈에서 main 으로 지정된다.
    ----- main.py
      |
      |-- sub.py
    
    이런 형태로 디렉토리에 모듈 2개가 존재한다고 하자. 여기서 start의 역할을 하는 메인 모듈이 main.py라고 할 때,
    
    main.py, sub.py 의 코드가 다음과 같다고 하자.
    
    ### sub.py
    print("beginning of sub.py...") 
    print('name : {0}'.format(__name__)) 
    print("end of sub.py...")
    
    ### main.py
    import sub
    print("beginning of main.py...") 
    print('name : {0}'.format(__name__)) 
    print("end of main.py...")
    main.py를 메인모듈로 실행했을 때의 결과는 다음과 같다.
    
    beginning of sub.py... name : sub
    end of sub.py... 
    beginning of main.py... name : __main__
    end of main.py...
    

    2.3 패키지

    • 모듈을 모아놓는 디렉토리
    • 모듈 꾸러미로 해석하면 이해하기 편함
    • 디렉토리가 파이썬의 패키지로 인정받으려면 init.py 파일을 그 경로에 갖고 있어야 함
    • 보통의 경우, init__.py 파일 내용은 대개 비워둠
    ----- main.py
      |
      |-- package(folder)
      |      |
      |      |-- calculator.py
      |      |-- __init__.py
    
    이런 디렉토리 구조일때, 패키지로 사용할 디렉토리 안에 __init__.py가 있다면 패키지로 인정이 됨.
    
    ### 사용 예시
    from package import calculator
    
    calculator.plus(1,3)

    site-packages : 파이썬의 기본 라이브러리 패키지 외에 추가적인 패키지를 설치하는 디렉토리. "C:\Python34\lib\site-packages" 이렇게 생긴 경로에 서드파티 모듈들을 설치한다.

    이를 이용하여, site-packages 안에 자신만의 패키지를 넣어서 사용할 수 있다.
    
    ----- site-packages
      		|
      		|-- package(folder)
      		|      |
      		|      |-- calculator.py
      		|      |-- __init__.py
    
    이렇게 해놓고, 
    from package import calculator
    이렇게 어디서든 사용할 수 있다는 것. (site-packages 하위에 있으므로, sys.path에 속하게 됨.)


    댓글

분노의 분석실 Y.LAB