정의: 입력값을 넣었을 때 결과물이 나오도록 하는 것이다.
사용 이유:
편리성( 같은 내용을 반복해서 똑같이 작성할 필요가 없음)
가독성( 프로그램의 흐름을 보기 편함)
오류 찾기 쉬움
구조
def add(a, b): # a,b는 매개변수
return a+b
- 인수: 함수를 호출할 때 전달하는 입력값
print(add(3,4)) # 3,4는 인수
- return:
- 함수의 결과값(반환값)을 돌려주는 명령어,
- return이 두 개 이상일 경우 가장 첫번째가 쓰임.
- 특별 상황을 만들면 함수를 즉시 빠지게 할 수 있다.
def say_nick(nick):
if nick == "바보":
return
print("나의 별명은 %s 입니다." % nick)
say_nick('야호') # 나의 별명은 야호입니다.
say_nick('바보')
- print: 출력(우리 눈에 값으로 보여줌)
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
def add(a, b): # 덧셈 함수 정의, 변수는 a + b
return a + b # 결과 값은 a + b
a = 5
b = 4
c = add(a,b)
print(c) # c = 9
4. 입력값과 결과값에 따른 함수의 종류
i) 일반적인 함수
: 입력값 과 결과값이 있다.
-> 결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2)
def add(a, b):
result = a + b
return result
a = add(3, 4)
print(a) # 7
ii) 입력값이 없는 함수
: 입력값 X , 결과값 O
-> 결과값을 받을 변수 = 함수이름()
def say():
return 'Hi'
a = say()
print(a) # Hi
iii) 결과값이 없는 함수
: 입력값 O, 결과값 X(return이 없다)
-> 함수이름(입력인수1, 입력인수 2)
def add(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b))
add(3, 4) # 3,4의 합은7입니다.
iv) 입력값 과 결과값이 없는 함수
: 입력값과 결과값 X
->함수이름()
def say():
print('Hi')
say() # Hi
5. 매개변수 지정하여 호출하기
- 매개변수를 지정하면 인수의 순서와 상관없이 사용을 할 수 있다. 왜냐하면, 그저 할당개념이라고 생각하면 되기 때문이다.
def add(a, b):
return a+b
result = add(a=3,b=7)
print(result) # 10
results = add(b=3,a=5)
print(results) # 8
6. 입력값이 몇 개인지 모를 때의 해결책
- 함수 형태에서 괄호 안이 일반적인 매개변수가 아닌 * 매개변수 로바뀜.
def add_many(*args):
result = 0
for i in args:
result = 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
- 선택권 부여
def add_mul(choice, args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif choice == "mul":
result = 1
for i in args:
result = result i
return result
result = add_mul('add', 1,2,3,4,5)
print(result) # 15
result = add_mul('mul', 1,2,3,4,5)
print(result) # 120
7. 키워드 파라미터 kwargs
- 매개변수 출력, 키 출력(모두 딕셔너리로 만들어져서 출력)
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1) # {'a': 1}
print_kwargs(name='foo', age=3) #{'age': 3, 'name': 'foo'}
8. 함수의 결과값은 언제나 하나이다.
def add_and_mul(a,b):
return a+b, a*b
result = add_and_mul(3,4)
result = (7, 12)
result1, result2 = add_and_mul(3, 4)
result1, result2 = (7, 12)
9. 매개 변수에 초깃값 미리 설정하기
- 함수의 인수를 전달하는 방법( 매개변수에 초깃값을 미리 설정)
- man = True: 매개변수에 미리값을 넣어주는 것( 매개변수 초깃값 설정)[매개변수에 들어갈 값이 항상 변하는 것이 아니어야함]
- 초기값 설정 시 항상 맨 뒤에 놓아야 한다.
def say_myself(name, old, man=True): # 3개의 매개변수를 받아서 마지막 인수인 성별로 true or false 출력
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("박응용", 27)
say_myself("박응용", 27, True)
#나의 이름은 박응선입니다.
#나이는 27살입니다.
#여자입니다.
10. 함수 안에서 선언한 변수의 효력 범위
- 함수 안에서 선언한 매개 변수는 함수 안에서만 사용될 뿐 밖에는 영향을 주지 않는다.
def vartest(a):
a = a + 1
vartest(3) # 4
print(a) # Error
11. 함수 안에서 함수 밖의 변수를 변경하는 방법
1. return 사용하기
- a = vartest(a)라고 대입하면 a가 vartest함수의 결과값으로 바뀐다.
- vartest(a)와 함수 안의 a 매개변수는 함수 밖의 a와 다른 것이다.!!
a = 1
def vartest(a):
a = a +1
return a #2
a = vartest(a) # a = vartest(1) =2
print(a) # 2
2. global 명령어 사용하기
a = 1
def vartest():
global a # 함수 안에서 함수 밖의 a 변수를 직접 사용, 종속적 함수를 만들 수 있기에 권유를 하진 않음
a = a+1
vartest()
print(a)
12. lambda
- 정의: 함수를 한 줄로 간결하게 만든다
- 경우:
- def를 사용해야할 정도로 복잡하지 않음
- def를 사용할 수 없는 곳에 쓰임
- 모양: lambda 매개변수1, 매개변수2 ...: 매개변수를 이용한 표현식
- 예시
add = lambda a, b: a+b
result = add(3, 4)
print(result) # 7
- 비교
def add(a, b):
return a+b
result = add(3, 4)
print(result) # 7