728x90
01. 파이썬 함수의 구조
- define/파이썬에서 함수를 만드는 구조
def 함수명(매개변수):
<수행할 문장>
# welcome 함수 정의
def welcome():
print("Hello!")
print("Nice to meet you")
# welcome 함수 호출
welcome()
Hello!
Nice to meet you
# add 함수 정의
def add(a, b):
return a + b
num1 = 3
num2 = 4
c = add(num1, num2)
print(c)
7
02. 함수 사용의 장점
- 코드의 용도를 구분
- 코드 재사용이 용이
- 실수를 방지(오타 등)
03. 매개변수와 인수
- 매개변수 : 함수에 입력으로 전달된 값을 받는 변수 (a, b)
- 인수 : 함수를 호출할 때 전달하는 입력값 (3, 4)
- 인수와 매개변수는 다른 개념이지만 함수가 호출된 뒤에는 구분이 모호해지므로 구분하지 않는 경우도 많음
- 함수의 사용법
- 결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ......)
def print_n_times(value, n):
for _ in range(n):
print(value)
print_n_times("안녕하세요", 3)
안녕하세요
안녕하세요
안녕하세요
# 매개변수를 2개를 지정하고 인수를 하나만 넣는다면 에러 발생
print_n_times("안녕하세요")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[15], line 2
1 # 매개변수를 2개를 지정하고 인수를 하나만 넣는다면 에러 발생
----> 2 print_n_times("안녕하세요")
TypeError: print_n_times() missing 1 required positional argument: 'n'
# 지정한 매개변수보다 인수를 많이 넣으면 에러 발생
print_n_times("안녕하세요", 10, 20)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[17], line 2
1 # 지정한 매개변수보다 인수를 많이 넣으면 에러 발생
----> 2 print_n_times("안녕하세요", 10, 20)
TypeError: print_n_times() takes 2 positional arguments but 3 were given
# 입력값이 없고 결괏값이 있는 함수
def say():
return "Hi"
say()
'Hi'
a = say()
print(a)
Hi
# 입력값이 있고 결괏값이 없는 함수
def add(a, b):
print(f"{a}, {b}의 합은 {a + b} 입니다")
add(3, 4)
3, 4의 합은 7 입니다
# 결괏값 확인
a = add(3, 4)
#a = None
print(a)
3, 4의 합은 7 입니다
None
04. 매개변수 지정하여 호출하기
add(a = 3, b = 7)
3, 7의 합은 10 입니다
add(b = 5, a = 3)
3, 5의 합은 8 입니다
05. 함수의 결괏값
def add_and_mul(a, b):
return a + b, a * b
result = add_and_mul(3, 4)
# 함수의 결괏값은 2개가 아니라 하나의 튜플로 반환되었음(함수의 결괏값의 데이터타입은 튜플)
print(result)
7
# 2개의 결괏값처럼 받고 싶다면
result1, result2 = add_and_mul(3, 4)
print(result1)
print(result2)
7
12
def add_and_mul(a, b):
return a + b
return a * b ##영원히 실행되지 않는 코드
# 함수는 return을 만나는 순간 함수 실행이 종료됨
result = add_and_mul(2, 3)
print(result)
5
06. return
- 함수를 종료시키고 싶을 때 사용할 수도 있음
def say_nick(nick):
if nick == "바보":
return
print(f"나의 별명은 {nick} 입니다")
say_nick("야호")
나의 별명은 야호 입니다
say_nick("바보")
result = say_nick("바보")
print(result)
None
07. 디폴트 매개변수
- 디폴트 : 매개변수로 전달되는 인수가 없는 경우에 기본적으로 사용하는 값
def say_myself(name, old, man = True):
print(f"나의 이름은 {name} 입니다")
print(f"나이는 {old}살 입니다")
if man:
print("남자입니다")
else:
print("여자입니다")
# default값은 생략 가능
say_myself("파이썬", 27)
나의 이름은 파이썬 입니다
나이는 27살 입니다
남자입니다
# default값을 덮어쓰기도 가능
say_myself("파이썬", 27, True)
나의 이름은 파이썬 입니다
나이는 27살 입니다
남자입니다
say_myself("파이썬", 27, False)
나의 이름은 파이썬 입니다
나이는 27살 입니다
여자입니다
say_myself("파이썬", 27, "girl")
나의 이름은 파이썬 입니다
나이는 27살 입니다
남자입니다
def print_n_times(value, n = 2):
for _ in range(n):
print(value)
print_n_times("안녕하세요")
안녕하세요
안녕하세요
08. 디폴트 매개변수의 위치
#파이썬은 인수를 어디에 대입해야할지 알 수 없으므로, 디폴트 매개변수 뒤에 인수가 올 수 없다.
def say_myself(name, man = True, old):
print(f"나의 이름은 {name} 입니다")
print(f"나이는 {old}살 입니다")
if man:
print("남자입니다")
else:
print("여자입니다")
Cell In[65], line 2
def say_myself(name, man = True, old):
^
SyntaxError: parameter without a default follows parameter with a default
09. 지역변수와 전역변수
- 지역변수
- 함수 내부에서 선언한 변수는 함수 내부에서만 사용할 수 있는 변수가 됨
- 함수 외부에서는 지역변수에 접근할 수 없음
- 전역변수
- 함수 외부에서 선언한 변수는 함수 내부에서도 사용 가능
def vartest():
var = 10
print(var)
vartest()
10
print(var) ##함수 내부에서 만든 변수이기때문에 지역변수, 함수 바깥에서 지역변수를 쓰려고 하면 에러가남
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[82], line 1
----> 1 print(var)
NameError: name 'var' is not defined
var2 = 10
def var2test():
print(var2)
var2test()
10
print(var2)
10
10. 전역변수를 함수 내부에서 사용하는 2가지 경우
- 단순 참조
- 전역 변수의 값을 변경
a = 0
def f():
a = 10
print(a)
f()
10
print(a)
0
def f():
global a #전역변수 a를 사용하겠다
a = 10
print(a)
f()
10
print(a)
10
※ 함수 내부에서 전역변수를 건드리면 디버깅이 어려워지므로, global은 주력으로 쓰지 않고 꼭 필요할 때만 쓸 것
11. mutable과 immutable
def modify(lst, text):
lst[0] = 99
text = text.replace("a", "b")
return lst, text
my_list = [1, 2, 3]
my_string = "apple"
modify(my_list, my_string)
print(my_list, my_string)
[99, 2, 3] apple
※ 99는 대체됨, apple은 그대로
##다른 변수에 값을 받으면 apple도 변경된 값으로 출력됨
modified_list, modified_string = modify(my_list, my_string)
print(modified_list, modified_string)
[99, 2, 3] bpple
12. 가변 매개변수(여러 개의 입력값을 받는 함수)
- 함수로 전달해야하는 인수의 개수가 정해지지 않은 매개변수
- 함수 정의시 매개변수 앞에 * 을 붙이면 가변 매개변수가 됨
- 전달되는 인수는 하나의 튜플 형태로 전달
- 가변 매개변수의 제약
- 가변 매개변수 뒤에는 일반 매개변수가 올 수 없음
- 가변 매개변수는 하나만 사용할 수 있음
def show(*args): ##arguments
print(args)
show("python")
('python',)
type(("python",)) ##콤마가 있어야 튜플
tuple
type(("python,")) ##콤마가 없으면 String
str
show("happy", "birthday")
('happy', 'birthday')
def add_many(*args):
result = 0
for i in args:
result += i
return result
result = add_many(1, 2, 3)
print(result)
6
result = add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(result)
55
add_many(range(10), ) ###수열로 들어가는게 아니라 통으로 들어감
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[33], line 1
----> 1 add_many(range(10), )
Cell In[28], line 5, in add_many(*args)
2 result = 0
4 for i in args:
----> 5 result += i
7 return result
TypeError: unsupported operand type(s) for +=: 'int' and 'range'
result = 0
result + range(10)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[34], line 3
1 result = 0
----> 3 result + range(10)
TypeError: unsupported operand type(s) for +: 'int' and 'range'
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
13. 키워드 매개변수
def print_kwargs(**kwargs): ##키워드 매개변수는 딕셔너리로 받아야 한다
print(kwargs)
print_kwargs(a = 1)
{'a': 1}
print_kwargs(name = "foo", age = 3)
{'name': 'foo', 'age': 3}
14. 함수 매개변수 순서
- 일반 매개변수
- 디폴트 매개변수
- 가변 매개변수
- 키워드 매개변수
※ 이론상 다 쓰고 싶으면 이순서대로 쓰면됨
15. 연습문제
# 1. 주어진 자연수가 홀수인지 짝수인지 판별해주는 함수(함수명 : is_odd)를 작성하기
def is_odd(num):
if num % 2 == 1:
return True
else:
return False
# return num % 2 == 1
is_odd(3)
True
# 2. 커피자판기 코드 만들기
- 커피자판기에 돈과 주문할 커피를 전달
- 주문할 수 있는 커피의 종류와 가격은 다음과 같음
- 아메리카노: 1000원
- 카페라떼 : 1500원
- 카푸치노: 2000원
- 없는 커피를 주문할 경우 입력한 돈을 그대로 반환
- 구매 금액이 부족하면 입력한 돈을 그대로 반환
- 정상 주문이면 주문한 커피와 잔돈을 반환
##해설
def coffee_machine(money, pick):
print(f"{money}원에 {pick}을 선택하셨습니다")
menu = {"아메리카노" : 1000,
"카페라떼" : 1500,
"카푸치노" : 2000}
if pick not in menu:
print(f"{pick}는 없는 메뉴입니다")
return money
elif menu[pick] > money:
print(f"{pick}는 {menu[pick]}원 입니다")
print(f"돈이{money[pick] - money}원 부족합니다")
return money
else:
print(f"{pick}는 {menu[pick]}원 입니다")
print(f"돈이{money - menu[pick]}원 부족합니다")
return pick, money - menu[pick]
coffee_machine(pick = "마키아또", money = 15000)
15000원에 마키아또을 선택하셨습니다
마키아또는 없는 메뉴입니다
coffee_machine(pick = "카페라떼", money = 2000)
2000원에 카페라떼을 선택하셨습니다
카페라떼는 1500원 입니다
돈이500원 부족합니다728x90
'01_Python' 카테고리의 다른 글
| 43_파이썬 내장함수 (3) | 2025.01.09 |
|---|---|
| 42_데이터 입출력 (1) | 2025.01.09 |
| 40_제어문>제어문연습(2) (0) | 2025.01.08 |
| 39_제어문>리스트 내포(List comprehension) (0) | 2025.01.08 |
| 38_제어문>enumerate함수 (0) | 2025.01.08 |