Python & Django Day5
Fastcampus Python&Django 온라인 강의를 듣고 작성한 Class note입니다.
함수(packing, unpacking), 재귀함수(예외처리)
함수(Function)
추상화
별도 공간에 존재하여, 변수간 간섭이 방해를 일으키지 않는 방법
분리
코드는 다른 곳에 작성되어, 우리가 필요한 경우 호출만 하여 사용할 수 있는 방법
1def func_name(arg):
2 # code
3 print("Hello, Func")
4 return arg
5
6func_name()
1def add(a, b):
2 c = a + b
3 return c
4
5x = add(5, 5)
6print(x)
parameter(매개변수), argument(인자) 란?
parameter
함수 정의할때 어떤 값을 받겠다 라고 선언하고, 실행부에서 사용하는 변수를 의미
argument
함수를 호출할때 함수에게 넘기는 값들
1def func(parameter1, parameter2): # parameter1, parameter2는 parameter
2 print(parameter1 + parameter2)
3 return parameter1 + parameter2
4
5func(3, 4) # 3, 4는 argument
정리하면 “func이라는 함수를 호출할때 argument(인자)로 3과 4를 넘겼고, func에서는 parameter(매개변수)에 3, 4를 받아서 실행되었다” 라고 정리될 수 있다.
연습
다음 연산을 담당하는 함수를 만들어서 순서대로 실행하기
-
1~9까지 숫자를 하나 선택
-
선택한 숫자에 2를 곱한다.
-
5를 더한다.
-
1769를 더한다.
-
자신이 태어난 년도를 뺀다.
1def choice_number():
2 number = input('1~9까지 숫자 중 정수 하나를 선택하세요.')
3 return int(number)
4
5def multi2(number):
6 return number * 2
7
8def add5(number):
9 return number + 5
10
11def add1769(number):
12 return number + 1769
13
14def sub_birth_year(number):
15 return number - 1987
16
17number = choice_number()
18number = multi2(number)
19number = add5(number)
20number = sub_birth_year(add1769(number))
21print(number)
함수2
default value
1def func_name(위치인자, 키워드인자):
1def range_list(start, end=None):
2 if not end:
3 return list(range(start))
4 return list(range(start, end))
5
6print(range_list(10))
7# default 값은 항상 뒤만 가능하므로 start=0으로 지정하는 것 불가
1def range_list(start, end=None, step=None):
2 if not end and not step:
3 return list(range(start))
4 elif not step:
5 return list(range(start, end))
6 return list(range(start, end, step))
1def test(a, b, c):
2 print('a :', a)
3 print('b :', b)
4 print('c :', c)
5
6test(b=1, c=2, 3) # Error : 위치인자 맨 앞에 들어가야 함
7test(a=1, 2, c=3) # Error : 위치인자 에러
8test(1, a=2, c=3) # Error : b=1로 인식되지 않음
9test(1, b=2, c=3)
packing, unpacking
packing
1def sum_all(a, b, c):
2 return a + b + c
3
4print(sum_all(1, 2, 3))
5
6
7### packing
8## EX1
9def sum_all(*args): # 위치인자 값이 tuple로 들어옴
10 return sum(args)
11
12print(sum_all(1,2,3,4,5,6))
13
14## EX2
15def print_f_name(**kwargs): # 키워드인자 값이 dictionary로 packing 되어서 들어옴
16 for key in kwargs:
17 print(key, '의 이름은', kwargs[key])
18
19print_f_name(faterh="임꺽정", mother="김말숙", cat="자두", bro="곰")
20
unpacking
1## EX1
2def sum_all(*args):
3 return sum(args)
4
5print(sum_all(*[1,2,3,4,5,6]))
6# list를 값으로 넣는 경우 앞에 *을 붙여주면 unpacking 된다
7
8
9## EX2
10family_dict = {
11 "father": "임꺽정",
12 "mother": "김말숙",
13 "cat": "자두,
14 "bro": "곰"
15}
16
17def print_f_name(**kwargs):
18 for key in kwargs:
19 print(key, '의 이름은', kwargs[key])
20
21print_f_name(**family_dict)
연습
전연 변수 활용하기
-
함수를 호출할 때마다 좋아하는 것을 묻고 입력 받아서 likes라는 변수에 리스트로 담기
-
원하는 횟수만큼 호출하고 최종 결과물을 출력해보기
1def likesList():
2 likes = []
3 flag = True
4 while flag:
5 like = input("좋아하는 것을 입력하세요")
6 if like == "종료":
7 flag=False
8 break
9 likes.append(like)
10 print(likes)
11
12likesList()
함수가 변수를 참조하는 방법
Recursion Function 재귀함수
1# n! => n * (n-1) * (n-2) * ... * 1
2
3def factorial(n):
4 result = 1
5 for i in range(1, n+1)
6
1# 정수 a와 n을 받아서 a에 n을 더하는 재귀함수 만들기
2def add_n(a, n):
3 if n == 0:
4 return a
5 return 1 + add_n(a, n-1)
6
7print(add_n(10,7))
예외처리
1try:
2 Error 발생할 우려가 있는 코드
3except:
4 Error 발생시 작동하는 코드
1num = input('숫자를 입력하세요.:')
2num = int(num)
3print(num + 2)
4
5
6# 예외처리
7try:
8 num = input('숫자를 입력하세요.:')
9 num = int(num)
10 print(num + 2)
11except:
12 print("숫자를 아라비아 문자로 입력하세요.")
13
14# 예외처리
15def addingTwo():
16 flag = True
17 while flag:
18 try:
19 num = input("숫자를 입력하세요(종료를 원하면 종료를 입력하세요) : ")
20 if num == "종료":
21 flag = False
22 break
23 num = int(num)
24 print(num + 2)
25 exceptValueError, ZeroDivisionError:
26 print("아바리아 문자로 입력하세요 ")
27 continue
-
except 뒤에 반드시 ValueError 등 입력해 주어야 0 입력시 발생하는 에러가 따로 처리 됨.
입력하지 않으면 대형 프로그램 작정시 에러가 제대로 출력되지 않는 문제가 발생.
디버깅 어려워지게 됨. 예상되는 에러 모두 입력해주는 게 좋음.