📍 함수(function)
✅ 함수의 선언과 호출
✔️ 함수의 선언
def func_name(parameter1, parameter2):
code1
code2
.
.
.
return value
✔️ 함수의 호출(실행)
func_name(parameter1, parameter2)
# 직사각형의 넓이, 둘레
def rectangle(height, width):
area = height * width
perimeter = (height + width) * 2
print(area, perimeter)
rectangle(100, 50) # 5000 300
rectangle(10, 20) # 200 60
✅ 함수의 return
- 함수가 return을 만나면 해당 값을 반환하고 함수를 종료
- 만약 return이 없다면 None을 자동으로 반환
- return은 오직 하나의 객체만 반환
def my_max(num1, num2):
return 'hello'
if num1 > num2:
return num1
elif num1 == num2:
print('같습니다.')
else:
return num2
my_max(1,2) # 'hello'
def my_list_max(list1, list2):
if sum(list1) > sum(list2):
return list1
else:
return list2
my_list_max([1, 2, 3], [4, 5, 6]) # [4, 5, 6]
✅ 함수의 인자
✔️ 위치인자
: 기본적으로 함수는 인자의 위치로 판단
def cylinder(r, h):
return 3.14 * r**2 * h
# 인수 위치따라 값 다름
print(cylinder(10, 5)) # 1570.0
print(cylinder(5, 10)) # 785.0
✔️ 기본값
def func(p1=v1):
code
.
.
.
return p1
def greeting(name='익명'):
return f'{name}님 안녕하세요!!'
greeting('heeju') # 'heeju님 안녕하세요!!'
greeting() # '익명님 안녕하세요!!'
# 기본값이 있는 인자를 뒤쪽에 배치하지 않을 시 error 발생
def greeting(name='익명', age):
return f'{name}님은 {age}살입니다.'
더보기
Cell In[13], line 1
def greeting(name='익명', age):
^
SyntaxError: non-default argument follows default argument
# 기본값이 있는 인자를 선언하지 않을 수 있기 때문에 함수 정의 시 뒤쪽에 배열해야 함
def greeting(age, name='익명'):
return f'{name}님은 {age}살입니다.'
print(greeting(10)) # 익명님은 10살입니다.
✔️ 키워드 인자
: 함수를 호출할 때 내가 원하는 위치에 직접적으로 특정인자를 전달 가능
def greeting(age, name='익명'):
return f'{name}님은 {age}살입니다.'
print(greeting(10)) # 익명님은 10살입니다.
# 인자 위치를 변경하여 사용가능
print(greeting(name='홍길동', age=30)) # 홍길동님은 30살입니다.
✔️ 가변 인자 리스트
: 인자를 여러개 받아올 수 있음
def func(*parms):
code
.
.
.
# 여러 개의 숫자를 받아 그 중 가장 큰 수를 리턴
def my_max(*numbers):
result = numbers[0]
for number in numbers:
if result < number:
result = number
return result
print(my_max(1, 2, 3, 4, 5)) # 5
print(my_max(-1, -2, -3)) # -1
✔️ 정의되지 않은 키워드 인자 처리하기
def func(**kwargs):
code
.
.
.
def fake_dict(**kwargs):
for key, value in kwargs.items():
print(f'{key}는 {value}입니다.')
fake_dict(korean='안녕', english='hello')
# korean는 안녕입니다.
# english는 hello입니다.
✔️ dictionary를 인자로 넣기(unpacking)
def sign_up(id, pw, pw_confirmation):
if pw == pw_confirmation:
print(f'{id}님 회원가입이 완료되었습니다.')
else:
print('비밀번호가 일치하지 않습니다.')
sign_up('change', '1234', '1234') # change님 회원가입이 완료되었습니다.
sign_up('change2', '1234', '12345') # 비밀번호가 일치하지 않습니다.
account = {
'id': 'change',
'pw': '1234',
'pw_confirmation': '1234',
}
sign_up(**account) # change님 회원가입이 완료되었습니다.
✔️ lambda 표현식
: 일회성(임시) 함수
lambda parameter: expression
(lambda x, y: x + y)(1, 2) # 3
# 위와 같은 함수
def my_sum(x, y):
return x + y
print(my_sum(1, 2)) # 3
✔️ 타입힌트
def my_sum(a: int, b: int): # 인자 타입을 힌트
return a + b
my_sum(1, 2) # 3
✔️ 이름공간(scope)
: python에서 사용되는 이름들은 이름공간(namespace)에 저장됨
- Local scope : 정의된 함수 내부
- Enclosed scope : 상위 함수
- Global scope : 함수 밖의 변수 혹은 import된 모듈
- Built-in scope : python이 기본적으로 가지고 있는 함수 혹은 변수
str = '123'
print(str) # 123
# local scope에 str을 정의하였기 때문에 Built-in scope 오류 발생
str(123)
더보기
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[30], line 1
----> 1 str(123)
TypeError: 'str' object is not callable
del str
str(123) # '123'
a = 1
def local_scope(a):
print(a)
# def 안의 a 값
local_scope(5) # 5
# def 밖의 a 값
print(a) # 1
# global 메소드로 def 밖의 a 사용 가능
a = 10
def global_scope():
global a # def 밖의 a 값 사용
print(a)
global_scope() # 10
✅ 재귀함수(recursive)
: 함수 내부에서 자기 자신을 호출하는 함수
✔️ 팩토리얼
- n! = 1 * 2 * 3 * ... * n
# 반복문
def fact(n):
result = 1
while n > 1:
result = result * n
n = n - 1
return result
print(fact(5)) # 120
# 재귀
def factorial(n):
if n <= 1:
return 1
else:
return factorial(n-1) * n
print(factorial(5)) # 120
✔️ 피보나치 수열
- F(0) = F(1) = 1
- F(N) = F(N-1) + F(N-2)
# 반복문
def fib_loop(n):
result = [1, 1]
for i in range(1, n):
end1 = result[-1]
end2 = result[-2]
fib_num = end1 + end2
result.append(fib_num)
return result[-1]
print(fib_loop(10)) # 89
# 재귀
def fib_rec(n):
if n == 0 or n == 1:
return 1
else:
return fib_rec(n-1) + fib_rec(n-2)
print(fib_rec(10)) # 89