🦁멋쟁이 사자처럼 AI School 8기 강의
👩💻 박두진 강사님 강의 3일차 (2023.1.4)
- 반복적으로 사용되는 코드를 묶어서 사용하는 방법
- 코드의 유지보수가 쉬워집니다!
def
,return
,parameter
,docstring
,scope
,lambda
- 사용법 : 함수선언(코드작성) -> 함수호출(코드실행)
앞서 배운 로또번호 출력기를 가져와보자!
🔗로또번호 출력기가 궁금하다면 < 클릭
로또번호 출력기를 함수로 선언해보자!
📝 함수 선언!
def display_lotto():
lotto = []
while len(lotto)<6 :
num = random.randint(1,45)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
print(lotto)
def
를 사용def
옆엔 함수 이름이 필요!()
안엔 parameter
가 들어가야함!(없을수도):
사용 필수!tab
키로 구분! < 띄어쓰기 4개 < PEP8파일 확인return
값 or 행동하는 것
으로 구분됨로또 출력기를 불러와보자!
📣호출문
display_lotto()
()
안에는 argument
값이 들어가면 됨.함수코드의 장점은
길이가 긴 코드를 반복해서 적지 않아도 된다는 점!
그냥 함수이름만 불러주면 계속해서 해당 코드들을 반복할 수 있음!
함수를 호출하는 코드에서 함수를 선언하는 코드로 데이터를 전달할 때 사용
📝 로또 숫자의 개수를 10개로 싶을 때 > count
: 10
# 함수 선언
def display_lotto(count):
lotto = []
while len(lotto)<count :
num = random.randint(1,45)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
print(lotto)
# 함수 호출
display_lotto(10)
✋여기서!
Parameter : count
Argument : 10
즉, 함수 선언 옆에 ()안의 내용이 파라미터
함수 호출 ()안의 내용이 arg
특별한 경우가 아닌 이상 (바로 뒤에 나오긴함)
len(Parameter) == len(Argument)
> True ! 이여야 한다!
즉, Prameter의 개수가 여러개여도 함수가 선언될 수 있으며 선언될 때 무조건 arg의 개수도 같아야함!
순서도 매우매우 중요!
📝예시 (로또 개수, 로또번호의 시작, 로또번호의 끝)
# 함수 선언
def display_lotto(count, start, end):
lotto = []
while len(lotto)<count :
num = random.randint(start,end)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
print(lotto)
# 함수 호출
display_lotto(10,1,100)
Parameter에 Default 값을 설정
📝예시
# 함수 선언
def display_lotto(count, start=1, end=45):
lotto = []
while len(lotto)<count :
num = random.randint(start,end)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
print(lotto)
# 함수 호출
display_lotto(6)
함수 선언에서 파라미터 값에 디폴트 값을 설정해줘서
함수 호출에서 기본값에서 바꿀 필요가 없다면 그대로 기본값이 실행됨
대신 기본값이 정해져 있지 않을 땐 무조건 arg를 써줘야함
그러니까 end값을 바꿔주고 싶은거임
📝예시
# 함수 선언
def display_lotto(count, start=1, end=45):
lotto = []
while len(lotto)<count :
num = random.randint(start,end)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
print(lotto)
# 함수 호출
display_lotto(6, end=100)
keyward argument
를 이용해서 바꾸면 됩니다!
파라미터 변수를 적어서 바꿔주면 된다는 거임!
❓호출에서 display_lotto(6, ,100)
이러면 안되나요?
🙃 안됩니다. 꼭 keyward argument를 사용해주세요
아뇨.. 그 내용은 5. *args
,**kwargs
에서 나와요!
return 사용처
함수를 호출해서 결과 데이터를 변수에 저장할 때,
함수의 코드를 중단할 때
📝간단한 예제로 보자!
# 출력만 하는 함수
def plus1(n1, n2):
print(n1 + n2)
# 값을 가져오는 함수
def plus2(n1, n2):
return n1 + n2
# 함수 호출
result1 = plus1(1, 2) # 결과 3
result2 = plus2(2, 3) # 결과가 나타나지 않음
print(result1, result2) # 결과 : None 5
plus1
: 함수를 호출하면 출력하는 함수plus2
: 함수를 호출하면 값을 받아오는 함수result1
: plus1
을 출력했기 때문에 결과값이 불러옴!, 값이 저장 안됨result2
: plus2
를 호출했기 때문에 결과값을 저장함print
문result1
은 저장된 값이 없기 때문에 Noneresult2
는 return
값이 불러와짐 5def display_lotto(count, start=1, end=45):
lotto = []
while len(lotto)<count :
num = random.randint(start,end)
lotto.append(num)
lotto = list(set(lotto))
lotto.sort()
return lotto
# 함수 호출
result = display_lotto(6, end=100)
print(result)
가능하면.. 로또출력기로 다 설명하고싶다... ^_ㅜ
📝 lotto 리스트의 개수가 6개가 될때 중단되게 해보자!
def display_lotto(count, start=1, end=45):
lotto = []
while 1:
num = random.randint(start,end)
lotto.append(num)
lotto = list(set(lotto))
if len(lotto)==6:
lotto.sort()
return lotto
# 함수 호출
result = display_lotto(6, end=100)
print(result)
if문을 이용해서 lotto의 개수가 6개가 되었을 때
return을 넣었더니!
정확하게 6개가 되었을 때 while문을 탈출해서 ~
코드가 완성이 됨
*args
, **kwargs
arg상관없이 value값을 출력할 수 있는 방법
*args
: 여러개의 키워드가 없는 arg를 튜플데이터타입으로 받아줌**kwargs
: 여러개의 키워드 arg를 딕셔너리 데이터 타입으로 받아줌
- 키워드
args
는 키워드가 없는arg
뒤에 위치해야함!!
이 예시는... 로또로 할 수 없어요
*args
📝 args와 타입
def plus(*args):
return sum(args),type(args)
#함수 호출
result,type_arg = plus(1,2,3,4,5,6,7,8,9,10)
result, type_arg #(55, tuple)
args의 타입의 결과는 tuple!
여러개의 키워드가 없는 아규먼트들을 튜플데이터 타입으로 받아줌
**kwargs
📝 kwargs와 타입
def plus(*args,**kwargs):
return sum(args),type(args),type(kwargs)
#함수 호출
result_args,type_args,type_kwargs= plus(1,2,3,4,5,6,7,8,9,10,n1=1,n2=2)
result_args,type_args,type_kwargs # (55, tuple, dict)
kwargs의 타입 결과는 dict!
*args
: 키워드가 없는 여러개의 arg를 받고 tuple형태로 묶음**kwargs
: 키워드가 있는 여러개의 arg를 받고 dict형태로 묶음*args
: list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 arg로 풀어준다**kwargs
dict 데이터타입의 데이터를 여러개의 키워드가 있는 arg로 풀어준다.👉 옆 장에서 계속~...