2019.03.06 - python(2)
절차지향 프로그래밍 (Procedural programming)
절차지향 프로그래밍 (procedure)는 절차, 순서대로 짜는 프로그래밍이 아니라, procedure 지향으로 생각하면 좋다. 이떄 말하는 procedure는 return이 있는 function이다.
개발자가 주로 하는 일은 추상화(abstraction)을 하는 일이다. 여기서 말하는 추상화는 interface와 implemantation을 분리한 것으로 interface는 함수 signature와 같다.
함수 signature는 3가지로 이루어져 있다. 그 3가지는 다음과 같다.
- 함수이름
- 매개변수
- 결과값
implementation은 내부 구현이다. 이는 자료구조 알고리즘과 같이 어떠한 interface에 대한 구현 방법이라고 보면 된다. 예를들면 sort()라는 interface에는 내부구현(implementation)이 다른 quick sort, bubble sort가 있다.
packing unpacking
# packing
container = 1, 2, 3, 4, 5
container
>>> (1, 2, 3, 4, 5)
# unpacking
a, b, *c = container
a
>>> 1
b
>>> 2
c
>>> [3, 4, 5]
함수에서의 가변인자 받기 (args)
def sum_int(*args):
print(type(args))
>>> <class tuple>
def sum_int(*args):
print(args)
li = [3, 4, 5, 6]
sum_int(li)
>>> ([3, 4, 5, 6],)
def sum_int(*args):
s = 0
for arg in args:
s += arg
return s
sum_int(1, 2, 3)
>>> 6
함수 실행에 *을 붙여주면 unpacking이 된다.
li = [3, 4, 5, 6]
sum_int(*li)
>>> 18
함수에서 키워드 받기 (kwargs)
def sum_int(*args, **kwargs):
print(args)
print(kwargs)
>>> (1, 2, 3)
{'age': 100, 'weight': 100}
li = [3, 4, 5, 6]
dic = {'a' : 1, 'b' : 2}
sum_int(*li, **kwargs)
>>> (3, 4, 5, 6)
{'a': 1, 'b': 2}
삼항연산자
a = 10
# 일반 if문
if a >= 10:
print('good!')
else:
print('bad!')
# 삼항연산자
print('good!') if a >= 10 else print('bad!')
>>> good!
재귀 함수
- 점화식 구현
- 기저 조건(= 탈출 조건, base case) 설정
def func(num):
print(num)
func(num-1)
Algorism
Factorial
- 점화식 구현 : fac(num) = fac(num-1) * num
- 기저 조건 : if num == 1 then return 1
def factorial(num):
if num == 1:
return 1
return factorial(num-1) * num
for num in range(1, 5+1):
print(factorial(num), end = ' ')
>>> 1 2 6 24 120
Fibonacci
- 점화식 구현 : fibonacci(num) = fibonacci(num-1) + fibonacci(num -2)
- 기저 조건 : if num == 1 then return 1
def fibonacci(num):
if num == 1 or num == 2:
return 1
return fibonacci(num-2) + fibonacci(num-1)
for num in range(1, 10+1):
print(fibonacci(num), end = ' / ')
>>> 1 / 1 / 2 / 3 / 5 / 8 / 13 / 21 / 34 / 55 /