본문 바로가기
파이썬 (Python)/General

Python 파이썬 함수, 클래스 그리고 Lambda 식의 모든 것

by ★√★ 2021. 2. 10.

안녕하세요, Davey 입니다. 이번 Posting은, 파이썬 Python에서 기초 내용이지만 정말 중요한, 구문 중 하나인, 함수, 클래스 그리고 Lambda식에 대해서, Posting 하려고 합니다. (eval & exce 함수 관련해서도 간단히게 다루도록 하겠습니다.) 여러가지 형태를 다루는 것이니, 최대한 자세히 설명드리도록 노력하겠습니다. 

 

1. 함수 (def)

: 여러가지 코드의 집합체라고 생각하시면 될 거 같습니다. 입력값이 있어도 되고, 없어도 되지만, 출력값은 무조건 나오는 집합체입니다. 이런 함수를 쓰는 이유는, 프로그래밍을 하다 보면 똑같은 내용을 반복해서 작업하는 경우가 있기 때문에, 이때 사용하는게, 함수이다. 그리고 가독성이 높고, 쉽게 코드를 이해하고 사용하는데 유용하기 때문에 함수를 이용합니다. 기본 구문은 아래와 같습니다. 

 

-> def 함수명 (변수 if required) :

        실행할 코드 

 

- 이렇게 말로 설명하는 것보다 하나의 예제를 통해서, 설명해보도록 하겠습니다. 예제 코드는 아래와 같습니다. 

  일단 입력 변수가 없는 함수를 먼저 구현해보도록 하겠습니다. 

 

def test01:                              # 함수 선언를 선언함.
    print('안녕하세요')                # '안녕하세요' 를 출력하는 코드

    

test01()                                   # 함수 test01를 실행

- 위 코드를 실행 시켜보면, 아래와 같이 '안녕하세요' 가 출력되는 걸 보실 수 있습니다.

 

 

 

 

- 이번에는, 변수를 입력하면서 출력되는 함수를 구현해보도록 하겠습니다.

 

def test01(a,b):                              # 함수 선언과 동시에, 변수 선언을 합니다.
    print(str(a), str(b), '안녕하세요')     # 입력 변수 a,b, 그리고 '안녕하세요' 를 출력하는 코드

                                                 # return 구문을 통해서, def test01 함수의 출력값을 결정함
    return a + b 

test01(1,2)                                    # 함수 test01를 실행

 

- 위 코드를 실행 시켜보면, 아래와 같은 결과 값을 보실 수 있습니다. a,b 변수를 받아서, 출력을 하는 함수입니다. 

 

 

 

2. 클래스 (class)

 : 함수는 코드의 집합체라고 하면, class는 그 상위 단계인, 함수의 집합체 입니다. 물론, 함수 뿐만 아니라, 내부적인 코드도 구현이 가능합니다. 하지만, 개별적인 코드가 필요없이 함수로 대체하면 되기 때문에, 굳이 코드를 구현 할 필요가 없는 것입니다. 그럼 class에 대한 구문을 알아보도록 하겠습니다. 

 

-> class class이름 :

         def 함수 이름 #1 (self) :

               코드 #1

               코드 #2

 

         def 함수 이름 #2 (self) :

               코드 #3

               코드 #4

 

- 말로 설명하는 것보다 예제를 통해서 설명하는 게 낳겠죠?! ㅎ 아래와 예제 보시면 이해가 더 빠르게 되실 겁니다.

 

 

class brother:                                            # brother이란 class를 선언
     def role04(self):                                    # role04 이란 함수를 선언 
        print("공부 열심히 하고, 동생 보살피기")  # print를 이용하여 코드를 한줄 실현

instance01 = brother()                                # brother class의 instance를 하나 생성
instance01.role04()                                     # role04 의 함수를 실행

 

 

- 위 코드를 실행 시켜 보면, 아래와 같은 결과를 보실 수 있습니다. class의 값을 출력하고 싶으면 instance 방식으로 출력을 해야 합니다. 이 부분은, 좀 번거롭습니다. 하지만, 금방 적응되실 겁니다.

 

 

 

- 그럼, class에서는 입력값을 어떻게 적용하는지에 대해서, 의구심을 안 가질 수 없죠. 그래서 준비했는데, 입력값에 따라 출력되는 class 출력값 예제 입니다. 여기에서는 위 class에서 사용하지 않은, __init__ 함수를 쓰셔야 합니다. 

 

class test01: 
    def __init__ (self, a):                    # test01의 입력값을 받기 위해서, __init__ 함수를 사용
        self.a = a                            # a의 값이, self.a로 입력이 됨으로써, class test01의 내부 값이 됨.
          
    def test01(self):  
       print('안녕하세요' + self.a)        # 내부값, self.a를 출력값에 포함하여, 출력함.
               
instance01 = test01(' Davey 님')      
instance01.test01()

 

- 위 코드를 실행 시켜 보면, 아래와 같은 결과를 보실 수 있습니다. class를 이용하여, instance를 선언할 때, 입력 값 'a'를 입력함과 동시에, 선언할 수 있습니다. 그리고 ' Davey 님' 이라는 값을 입력하여, 그 값이 반영된 값이 출력되는 걸  보실 수 있습니다.

 

 

 

 

- 그럼, 마지막으로, class의 입력을 유지한 채, 함수에 입력값을 입력해, 출력하는 class를 구성해보도록 하겠습니다. 아래 예제 참조 부탁 드립니다.

 

class test01:  
    def __init__ (self, a): 
        self.a = a 
         
    def test02(self, b):                                 # 입력 변수 b를 가지는 함수 test02를 선언함.
       print('안녕하세요' + self.a + str(b)) 
     
        
               
instance01 = test01(' Davey님') 
instance01.test02(' 만나서 반갑습니다')           # 입력 변수 b에 " 만나서 반갑습니다" 를 입력함.

 

- 위 코드를 실행 시켜 보면, 아래와 같은 결과를 보실 수 있습니다. class를 이용하여, instance를 선언할 때, 입력 값 'a'를 입력하고, instance 변수에서 함수를 실행 할때도, 'b' 에 입력되는 값을 같이 입력함으로써, 'b'의 값이 반영된 출력값을 보실 수 있습니다. (jupyter가 pycham이랑 달라서, 오류를 바로 바로 dictection 못해줘서, 오타 찾는라고 헤맸습니다.;;)

3. lambda 식

 : 파이썬에서 "lambda" 는런타임에생성해서사용할수있는익명함수이다. 즉, 함수형프로그래밍언어이다. 프로그래밍하면서, 간단한수식으로복잡한구문을한번해결할수있어, 정말유용한기능입니다. 한마디로말하면, 필요하면쓰고, 필요없으면, 버리면된다. 기본 구문은 아래와 같습니다. 

 

-> lambda 입력:출력값

 

간단한 예제를 통해서 이해를 돕도록 하겠습니다. 그냥 변수에 람다식을 넣어서 보여드리도록 하겠습니다. 

 

test02 = lambda a:a+2 

print(test02(5))

 

 

 

 

- 위 코드를 실행 시켜 보시면, 아래와 같이 간단하게, 2 + 5 = 7이 출려되는 걸 확인 하실 수 있습니다. 음.. 여기에서는 여러분들이 Merit를 못 느끼 실 수 있습니다. 그럼 다른 예제를 더 보여드리겠습니다. 

 

 

 

b = np.arange(10)                      # numpy를 이용하여 list화 한 변수 b

c = b.reshape(2,5)                      # reshape를 통해서, 재배열

print(c) 



test01 = lambda a:a==3             # lambda를 이용하여, 조건식 선언

print(test01(c))                          # lambda 함수에, c를 넣어서 출력

- 위 함수를 실행 시켜 보시면, 3인 값은 True, 3이 아닌 값은 False로 나오는 걸 보실 수 있습니다. 즉, 간단한 조건 문도, 이렇게 lambda 함수를 이용하여, 실행 시킬 수 있습니다. 정말 편리하지 않나요?!

 

 


4. eval & exce 식

 : string 형식의 식을 계산해주는 함수로서, Python으로 계산기 만드실 때 정말 유용한 구문입니다. 기본 구문 방식은 아래와 같습니다. (둘의 차이점은, 수식이냐 아니면, 변수까지 포함한 구문이냐의 차이입니다.)

 

 -> eval(string 계산식)

 -> exec (변수 = 변수를 포함한 string 계산식)

 

- 쉬운 이해를 돕기 위해서 아래와 같이 예문으로 설명 드리도록 하겠습니다. 

 

a = 5 
eval('a+10*2/2*10*9')                    # 수식을 넣어서, 출력함.

a = 5 
print(eval('a+10*2/2*10*9')) 

b = 5 
exec('b=b*9*10/8')                       # 변수와 같이 들어있는 문을 입력하여 출력함.
b

 

 

 

 

- 위 코드를 실행 시켜 보면, 아래와 같은 값을 출력하는 걸 확인할 수 있습니다. a, b의 값을 입력하는 걸 잊지 마세요!

 

 


 이상입니다. 은근히, 간단한 거지만, 오타 때문에 오류 찾다가 좀 시간이 많이 걸린 거 같습니다. class와 함수, 그리고 lambda, 마지막으로 exec, eval 함수 까지, 유용한 Tool 이니까, 잘 이용하셔서, 멋진 프로그래밍 한 번 짜보시길 바라며, 이만 마무리 하겠습니다. 그럼 항상 애기드리지만, 같이 성장하시죠! 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.


[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

 

 

728x90

댓글