이미지 출처: https://wikidocs.net/192339
파이썬에서 함수는 특정 작업을 수행하는 블록으로, 재사용 가능한 코드 조각입니다.
먼저 우리가 코딩을 하기 전에 함수를 사용함으로써 얻을 수 있는 장점을 알아봅시다.
1.코드의 관리 및 간소화 : 프로그램의 규모가 커지고 많은 기능들이 탑재되어 있기 때문에 코드의 복잡도가 높아지는 경향이 있다. 우리가 아는 프로그램들도 수많은 코드들로 이루어져있다. 함수는 이러한 복잡한 프로그램의 흐름을 좀 더쉽게 풀어 나갈 수 있다.
2.코드의 재사용성 : 함수를 통해서 만들어 기능들을 만들어 놓으면 모든 프로그램 기능들은 분리된 모듈화된 기능들은 그 함수를 쓰기에 재사용이 될 수 있다.
3.코드의 안전성 : 함수 단위로 어떤 담당자가 지정되어서 개발을 하면 하나에만 집중하기에 코드의 안전성이 좋아진다.
파이썬 함수 사용법
# 아래가 기본 함수 정의 형태이다. def function_name(parameter): code
예1
# 함수를 만들때 파라미터는 임의로 지정 def first_func(w): # 함수 내부에서 쓸 변수를 w로 선언 print('Hello, ', w) # 함수를 호출할때 w에 어떤 단어가 와서 마지막에 print문으로 출력 word = 'Good boy' first_func(word) >>> Hello, Good boy
def first_func(w): print('Hello, ', w) word = 'Good boy' first_func() >>> TypeError: first_func() missing 1 required positional argument: 'w'
예2
def return_func(w1): value = 'Hello ' + str(w1) return value # value를 통해 리턴하고자 하는 값을 정의한다. x = return_func('Good boy!') print(x) >>> Hello Good boy!
예3(다중반환)
def func_mul(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return y1, y2, y3 x, y, z= func_mul(10) # 3개를 리턴하기에, 받는쪽도 3개로 입력받아야한다.(언팩킹) print(x, y, z) >>> 100 200 300
def func_mul2(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return (y1,y2,y3) q = func_mul2(20) print(type(q), q, list(q)) >>> <class 'tuple'> (200, 400, 600) [200, 400, 600]
def func_mul3(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return [y1,y2,y3] p = func_mul3(20) print(type(p), p, set(p)) >>> <class 'list'> [200, 400, 600] {200, 600, 400}
def func_mul4(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return {'v1' : y1, 'v2': y2, 'v3': y3} d = func_mul4(30) print(type(d), d, d.get('v2'), d.items(), d.keys()) >>> <class 'dict'> {'v1': 300, 'v2': 600, 'v3': 900} 600 dict_items([('v1', 300), ('v2', 600), ('v3', 900)]) dict_keys(['v1', 'v2', 'v3'])
names=['철수', '영희', '훈이'] for i,name in enumerate(names): print('{}번째,{}'.format(i, name)) >>> 0번째,철수 1번째,영희 2번째,훈이
def args_func(*args): for i,v in enumerate(args): # i는 index 0번부터 시작하고, v는 실제값 print('Result : {}'.format(i), v) print('------') # (*args)에 어떤 묶음이 오더라도 횟수만큼 풀어서 사용한다는 의미 args_func('Lee') # *가 붙어있으면 튜플 형태의 0번 index로 인식한다. >>> Result : 0 Lee ------ # 2개를 호출할 때 ,우리가 함수를 선언할 때 보통인자가 2개면, (*args, ars)이렇게 2개를 받아야하는데 언팩킹으로, 네가 넘기는 것들을 묶어서 보낸다고 나는 생각할 것이고,(*args)와서 나는 풀어서 하나의 자료구조로써 메소드 안에서 사용하게해준다는 뜻 args_func('Lee', 'Park') >>> Result : 0 Lee Result : 1 Park ------ args_func('Lee', 'Park', 'Kim') # 하나의 튜플로 간주 >>> Result : 0 Lee Result : 1 Park Result : 2 Kim ------
def kwargs_func(**kwargs): # 매개변수 형 자유 for v in kwargs.keys(): print('{} : {} '.(format(v), kwargs[v])) print('------') kwargs_func(name1 ='Lee') >>> name1 : Lee ------ kwargs_func(name1 ='Lee' ,name2 = 'Park') >>> name1 : Lee name2 : Park ------ kwargs_func(name1 ='Lee' ,name2 = 'Park', name3 = 'City') >>> name1 : Lee name2 : Park name3 : City ------
def example(args_1, args_2, *args, **kwargs): print(args_1, args_2, args, kwargs) example(10, 20, 'Lee', 'Kim', 'Park', age1 = 20, age2 = 30, age3 = 40) >>> 0 20 ('Lee', 'Kim', 'Park') {'age1': 20, 'age2': 30, 'age3': 40}
def nested_func(num): def func_in_func(num): # 함수정의 print(num) print('in func') func_in_func(num + 100) # 함수 호출 func_in_func(1000)
def nested_func(num): def func_in_func(num): print(num) print('in func') func_in_func(num + 100) nested_func(100) >>> in func 200
람다(lambda) 함수는 파이썬에서 간단한 함수를 간결하게 정의하는 방법입니다. 람다 함수는 lambda 키워드를 사용하여 정의하며, 주로 간단한 연산을 수행하는 함수를 작성할 때 활용됩니다. 람다 함수는 익명(이름이 없는) 함수로도 불립니다.
기본구조
lambda arguments: expression
아래 함수를 람다식으로 바꾸면 ??
def mul_func(x,y): return x * y
# 람다는 함수의 이름이 없다. lambda x, y: x*y
일반적 함수 -> 변수
def mul_func(x,y): return x * y print(mul_func(10,50)) >>> 500 mul_func_var = mul_func # 일반적인 함수는 객체가 만들어지고, 메모리가 할당되어 실행 print(mul_func_var(20, 50)) >>> 1000
람다 함수 -> 할당
lambda_mul_func = lambda x, y: x*y # 람다는 바로 변수에 할당 print(lambda_mul_func(50, 50)) >>> 2500
def func_final(x, y, func): print('>>>>>>',x * y * func(100, 100)) # 3번째 인자는 함수로 받아보자. func_final(10, 20, lambda x,y: x*y) >>>>> 2000000
함수 힌트를 통해 word 매개변수의 데이터 타입은 문자열(str)이고, num 매개변수의 데이터 타입은 정수(int)이며, 함수의 반환값은 정수(int)임을 나타내고 있습니다.
함수는 입력받은 문자열의 길이와 정수를 곱한 값을 반환합니다. 여기서는 'I love you'라는 문자열의 길이(10)과 10이 주어졌으므로, 반환값은 100이 될 것입니다.
def tot_length(word: str, num: int) ->int: return len(word) * num print('hint eam1 : ', tot_length('I love you', 10)) >>> hint eam1 : 100
def tot_length2(word: str, num: int) -> None: print('hint exam2 : ', len(word) * num) tot_length2('niceman', 10) >>> hint exam2 : 70
지금까지 배운 것들을 함수안에서 사용해보고 여러가지 사측연산을 이용해서 계산기 형식으로 만들어보면 함수에 익숙해지고 좋을 것 같습니다.😙