4Z1 - Artificial Intelligence/python for ML

MRP -111 : 1-1. 파이썬 '함수 , 클래스'

Richrad Chung 2020. 9. 16. 13:11

 

함수 기초문법
: https://dojang.io/mod/page/view.php?id=2357

 

함수는 자주 사용하는 코드를 한 곳에 모아 놓은 것을 뜻합니다.

 

def 함수이름(매개변수1, 매개변수2):    # 매개변수 지정    

      return 반환값1, 반환값2    # 값을 여러 개 반환

 

변수1, 변수2 = 함수(인수)      # 반환값을 변수 여러 개에 저장

 

 

위치 인수

함수에 인수를 순서대로 넣는 방식을 위치 인수라고 합니다. 위치 인수를 사용하는 함수는 리스트(튜플) 앞에 *(애스터리스크)를 붙여서 리스트 언패킹으로 넣을 수 있습니다.

 

def 함수이름(*매개변수):    # 위치 인수를 사용하는 가변 인수 함수    

      코드  

함수(인수1, 인수2)    # 인수 여러 개를 직접 넣기

함수(*리스트)         # 리스트 언패킹

함수(*튜플)           # 튜플 언패킹

 

 

 

 

 

키워드 인수

함수에 넣는 인수에 이름(키워드)를 붙이는 방식을 키워드 인수라고 합니다. 키워드 인수는 딕셔너리 앞에 **(애스터리스크 두 개)를 붙여서 딕셔너리 언패킹으로 넣을 수 있습니다.

 

def 함수이름(**매개변수):    # 키워드 인수를 사용하는 가변 인수 함수    

      코드  

 

함수(키워드1=1, 키워드2=2)    # 키워드 인수를 직접 넣기

함수(**딕셔너리)                  # 딕셔너리 언패킹

 

personal_info(name='홍길동', age=30, address='서울시 용산구 이촌동')

 

 

 

매개변수의 초깃값

함수를 만들 때 매개변수에 초깃값을 지정하면 함수를 호출할 때 해당 인수를 비워두고 호출할 수 있습니다.

def 함수이름(매개변수=):    # 매개변수에 초깃값 지정    

      코드  

함수()    # 매개변수에 초깃값이 있으므로 인수를 비워두고 호출

 

 

함수의 재귀호출

함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라 합니다.

 

 

 

람다 함수: 익명 함수(anonymous function)

지금까지 def로 함수를 정의해서 사용했습니다. 이번에는 람다 표현식으로 익명 함수를 만드는 방법을 알아보겠습니다.

람다 표현식은 식 형태로 되어 있다고 해서 람다 표현식(lambda expression)이라고 부릅니다. 특히 람다 표현식은 함수를 간편하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용합니다.

# lambda 함수 선언

f = lambda x : x+100

for i in range(3):
    print(f(i))
    
    
    
# lambda 에서 입력값을 반드시 이용할 필요는 없음

def print_hello():
    
    print("hello python")
       
def test_lambda(s, t):
    
    print("input1 ==", s, ",  input2 ==", t)
    
s = 100    # 생각해보기 => s, t 선언 및 값 할당이 없으면 error  
t = 200

fx = lambda x, y : test_lambda(s, t)    # fx(x,y) = test_lambda(s, t)
fy = lambda x, y : print_hello()        # fy(x,y) = print_hello() 


fx(500, 1000)     # fx(500, 1000) = test_lambda(s, t) 
fy(300, 600)      # fy(300, 600)  = print_hello()

클래스 기초 문법
:dojang.io/mod/page/view.php?id=2396

 

클래스 설계도 :

 

 -> 추후 예제 설계도 인입

 

유의 사항: 참조에러, private , public, self 처리 , 동일명 이용시 차이점등
클래스 예제
class Person:
    
    count = 0    # class variable
    
    def __init__(self, name):
        self.name = name
        Person.count += 1    # class 변수 count 증가
        print(self.name + " is initialized")
        
    def work(self, company):
        print(self.name + " is working in " + company) 
        
    def sleep(self):
        print(self.name + " is sleeping")
    
    @classmethod
    def getCount(cls):    # class method
        return cls.count
    
# Person instance 2개 생성
obj1 = Person("PARK")
obj2 = Person("KIM") 

# method call
obj1.work("ABCDEF")

obj2.sleep() 

# 속성에 직접 접근. 기본적으로 파이썬에서는 모두 public
print("current person object is ", obj1.name, ", ", obj2.name) 

# class method 호출
print("Person count ==", Person.getCount() )

# class variable direct access
print(Person.count)

 

with 예제

 

# with 구문을 사용한 방법
# with 블록을 벗어나는 순간 파일 객체 f가 자동으로 close 됨.

with  open("./file_test", 'w')  as f:
    f.write("Hello, Python !!!")