함수
def, return, argument, parameter, docstring, scope, lambda
반복적으로 사용되는 코드를 묶어서 사용하는 방법
=> 코드의 유지보수가 쉬워진다.
사용법 : 함수선언(코드작성) -> 함수호출(코드실행)
- 함수
우선 로또번호를 리스트로 출력하는 코드를 보면 아래와 같다!
import random
# 1. 로또번호 저장 변수 생성
lotto = []
# 2. 아래의 코드 반복 : while
while True:
# 2-1. 1 ~ 45 랜덤한 숫자 출력 후 저장 : random_number : random.randint()
random_number = random.randint(1, 45)
# 2-2. lotto 리스트에 random_number 없으면, random_number를 lotto 변수에 추가 : list.append()
# if random_number not in lotto:
# lotto.append(random_number)
# 2-2. random_number를 lotto 변수에 추가 : list.append()
lotto.append(random_number)
lotto = list(set(lotto))
# 2-3. lotto의 데이터 갯수가 6개 이상이면 반복 중단 : if, len(), break
if len(lotto) >= 6:
break
# 3. 로또번호 출력 : print()
lotto.sort()
print(lotto)
로또번호가 잘 출력된다.
만약 로또를 1번이 아니라 여러 번 뽑아야 한다면 함수를 사용하면 편해진다.
import random
# 함수선언(코드작성)
def display_lotto():
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= 6:
break
lotto.sort()
print(lotto)
# 함수호출(코드실행)
for _ in range(10):
display_lotto()
display_lotto라는 이름의 함수로 코드를 함수화 해서 10번을 간편히 뽑을 수 있다.
- argment, parameter
함수를 호출하는 코드에서 함수를 선언하는 코드로 데이터를 전달할 때 사용
위의 코드를 변형시켜서 아래와 같이 상수였던 6을 count로 바꾸고 parameter로 설정하면...
import random
# 함수선언
def display_lotto(count): # count : parameter
lotto = []
while True:
random_number = random.randint(1, 45)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= count:
break
lotto.sort()
print(lotto)
# 로또번호출력 : 6개
display_lotto(6) # 6 : argument
# 로또번호출력 : 7개
display_lotto(7)
아래와 같이 로또번호 출력 개수를 조정할 수 있다.
(위의 코드에서 함수를 호출할때 display_lotto(6)의 괄호 안에 들어간 것이 argment이다.)
함수를 선언할 때 파라미터를 여러 개 작성할 수도 있다!
또한 파라미터의 디폴트 값을 설정할 수 있으며...
디폴트 값이 있는 파라미터는 디폴트 값이 없는 파라미터 뒤에 위치해야 한다.
다음 코드를 통해 살펴보자!
# 함수선언(코드작성)
def plus(n1, n2=10, n3=20): # n1, n2 : parameter, n2=10 : default parameter
print(n1 + n2 + n3)
# 함수호출(코드실행)
plus(1, 5) # 1, 2 : argument
plus(1, 10, 100) # 순서대로 하기 때문에 default값 그대로 입력해야함
plus(1, n3=100) # keyword argument : 중간에 default값 여러 개가 있어도 그 뒤의 argument작성가능
# 디폴트 파라미터는 디폴트 값이 없는 파라미터 뒤에 사용
덧셈을 해주는 코드이다.
plus(1, 5)의 경우 n1 = 1, n2 = 2, n3은 입력하지 않았기 때문에 디폴트 값인 20이다.
plus(1, 10, 100)의 경우는 모든 값을 입력해서 n1 = 1, n2 = 10, n3 = 100이다.
plus(1, n3=100)의 경우 n1 =1, n2는 입력하지 않았기 때문에 디폴트 값인 10, n3 = 100이다.
결과를 보자!
그럼 아까 작성했던 로또 코드를 발전시켜서...
파라미터에 count(로또번호 개수, 디폴트 값 = 6),
end(로또번호 끝 범위, 디폴트 값 = 45) 2개의 parameter을 넣어보자!
# display_lotto를 호출할때 파라미터가 없으면 1 ~ 45까지 6개의 숫자를 출력
# 숫자의 범위와 숫자의 갯수를 아규먼트로 설정해서 함수를 호출할수 있도록 함수를 수정
def display_lotto(count=6, end=45): # count : parameter
lotto = []
while True:
random_number = random.randint(1, end)
lotto.append(random_number)
lotto = list(set(lotto))
if len(lotto) >= count:
break
lotto.sort()
print(lotto)
display_lotto() # 1 ~ 45까지 6개의 숫자
display_lotto(10, 50) # 1 ~ 50까지 10개의 숫자
이렇게 코드를 작성 할 수 있고 출력결과는 아래와 같다.
- return
함수를 호출해서 결과 데이터를 변수에 저장할 때, 함수의 코드를 중단할 때 사용한다.
1. 결과 데이터를 변수에 저장
간단한 덧셈 함수를 살펴보자!
def plus1(n1, n2):
print(n1 + n2)
def plus2(n1, n2):
return n1 + n2
result1 = plus1(1,2)
result2 = plus2(2, 3)
print(result1, result2)
출력 결과는
이러한데...
return이 있는 함수는 데이터가 변수에 저장되어 5가 나오고...
return이 없는 함수는 result1에 아무것도 저장되지 않아 None이 출력된다.
위의 3은 result1 옆의 plus(1, 2)가 출력된 것이다.
2. 함수의 코드 실행 중단
# 함수의 코드 실행 중단
def echo(msg, count=3):
for idx in range(count):
if idx >= 5:
return
print(msg)
print('Done') # return이 아니라 break였다면 'Done'이 출력!
echo('python', 7)
위의 코드는 'python' 문자열을 여러번 출력하는 코드이다.
argument에 7을 입력했기 때문에 7번 for문이 돌아가야 하지만...
idx >= 5이면 return을 만나 함수를 탈출해 아래와 같이 'python'이 5번 출력된다.
print('Done')이 함수 내에 있기 때문에 'Done'은 출력되지 않는다.
3. 여러개의 데이터를 리턴
파이썬은 다른 언어와 다르게 데이터를 여러개 리턴할 수 있다!
아래의 코드는 덧셈, 뺄샘을 하는 함수의 코드이다.
def calc(n1, n2):
return n1 + n2, n1 - n2
plus, minus = calc(3, 1)
plus, minus
이런 식으로 리턴이 가능하다.
이번 시간에는 함수를 알아보았는데요...
양이 많아서 다음 시간에 함수2로 찾아오겠습니다!!!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/005.gif)
'멋쟁이사자처럼 AI스쿨' 카테고리의 다른 글
함수3(파이썬 강의 Day3) (0) | 2023.01.04 |
---|---|
함수2(파이썬 강의 Day3) (0) | 2023.01.04 |
조건부 확률을 통한 데이터분석(파이썬 강의 Day2) (0) | 2023.01.03 |
반복문(파이썬 강의 Day2) (0) | 2023.01.03 |
조건문(파이썬 강의 Day2) (0) | 2023.01.03 |
댓글