함수
프로그래밍을 하다보면 똑같은 내용을 반복해서 작성하는 경우가 많음 -> 함수로 해결가능
반복되는 부분이 있는 경우 그 부분을 한뭉치로 묶어서 입력값을 주었을때 결과값을 돌려주는 함수에 넣어서 이용하면 효율적이고 간편해짐
프로그램을 함수화 하면 프로그램의 흐름을 일목요연하게 볼 수 있음
오류가 어디서 발생하는지도 비교적 손쉽게 찾을 수 있음
def 함수이름(매개변수,...):
수행할 문장1
수행할 문장2
...
위와 같은 형식으로 함수를 선언할 수 있음
매개변수는 이함수에 입력으로 전달되는 값을 받는 변수
def add(a,b):
return a + b
a = 3
b = 4
print(add(3,4)) # 7
위 예제에서 함수의 이름은 add이고, 입력으로 2개의 값을 받고, 결과값은 2개의 입력값을 더한값이다
return은 함수의 결과값을 돌려주는 명령어
# 매개변수와 인수 Example
def add(a,b): # --> a,b가 매개변수
return a + b
print(add(3,4)) # --> 3,4가 인수
함수는 들어온 입력값을 받아 어떤 처리를 하여 결과값을 돌려줌
함수의 형태는 입력값과 결과값의 존재 유무에 따라 4가지 유형으로 나뉨
# 일반적인 함수의 형태
def 함수 이름(매개변수):
수행할 문장
...
return 결과값
# 일반적인 함수 Example
def add(a,b):
result = a + b
return result
a = add(3,4)
print(a)
def say():
return 'Hi'
a = say()
print(say())
say()처럼 매개변수를 입력하지 않고 함수를 호출할 수 있음 def add(a,b):
print('%d, %d의 합은 %d입니다'%(a,b,a+b))
add(3,4)
# 3, 4의 합은 7입니다.
a = add(3,4)
print(a) # None --> 결과값이 없음
def say():
print('Hi')
say()
# Hi
say() 처럼 함수 이름으로만 호출해도 함수가 실행함수를 호출할 때 매개변수를 지정할 수도 있음
함수 호출 시 바로 값을 대입해주면됨
def add(a,b):
return a + b
result = add(a = 3 , b = 4) # a는 3 b는 4 대입
print(result) # 7
함수에 들어갈 매개변수의 개수를 특정하지 못하는 경우에 파이썬에서는 이를 해결해주는 방법이 존재
함수의 정의 부분에서 매개변수 부분에 '*'를 넣어주면됨
# 매개변수가 여러개일 경우 Example
def 함수이름(*매개변수):
수행할 문장
...
# 입력값이 여러개인 함수 Example
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_may(1,2,3,4,5,6,7,8,9,10)
print(result) # 55
result = result + i은 *args에 입력받은 모든 값을 더하는 작업
*args는 입력값을 전부 모아서 튜플로 반환해서 입력값으로 넣어줌
args는 임의의 변수 이름으로 사용자에 맞게 변경가능
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(a=1) # {'a' : 1}
print_kwargs(name='foo', age=3) #{'age' : 3, 'name' : 'foo'}
키워드 파라미터는 매개변수앞 **를 붙여서 사용할 수 있음
**는 매개변수를 딕셔너리형으로 반환해줌
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)
함수의 결과값은 항상 1개이므로 (a+b, a*b)는 튜플로 반환된다
result1, result2 = add_and_mul(3,4)로 결과값을 두개처럼 받을 수 있음
함수는 return문을 만나는 순간 함수가 결과 값을 반환하므로 가장 먼저 만남 return문을 기준으로 함수가 종료됨
# 매개변수에 초기값 미리 설정 Example
def say_myself(name, old, man=True):
print("나의 이름은 %s입니다."%name)
print("나이는 %d살입니다."%old)
if man:
print("남자입니다.")
else:
pritn("여자입니다.")
say_myself("박응용",27)
say_myself("박응용",27, True)
say_myself("박응선",27, False)
man=True 부분을 보면 매개변수에 미리 값을 넣어줄 수 있음
함수의 매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해두면 유용함
say_myself("박응선",27, False)의 부분에서 man 부분을 False로 바꾸기 때문에 여자입니다.가 출력
함수를 def say_myself(name, man=True, old):와 같이 설정하고 say_myself('박응용',27)로 호출하면 오류가 발생함 why? ) 파이썬이 man = 27로 인식하기 때문에 오류가 발생 -> 따라서 초기화시키고 싶은 매개변수는 항상 뒤쪽에 넣어야함
# 함수 안에서 선언한 변수의 효력 범위 Example
a = 1
def vartest(a):
a = a + 1
vartest(a)
print(a)
vartest함수에서 매개변수 a의 값에 1을 더했으니까 2가 출력될것으로 예상되지만 실제로는 값이 1이 나옴
vartest에서 사용하는 변수a는 함수안에서만 사용되는 변수이므로 함수 밖 a에는 영향을 미칠 수 없음
# 함수 안에서 선언한 변수의 효력 범위 2 Example
def vartest(a):
a = a + 1
vartest(3)
print(a)
vartest(3)에서 a는 4가된다
print(a)를 하면 4가 출력되는것이 아니라 error가 발생한다
print(a)에서 사용하는 변수 a를 찾을 수 없기 때문에 error가 발생함
# return 사용해서 변경하기 Example
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a) # 2
return 문을 사용해 함수 안에서 함수 밖의 변수의 값을 변경
a = vartest(a)을 통해 vartest(a)의 반환값을 a에 대입함
# return 사용해서 변경하기 Example
a = 1
def vartest():
global a
a = a + 1
vartest()
print(a) # 2
global 명령어를 사용하는 방법
vartest 함수 안의 global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 의미
함수는 독릭접으로 존재하는것이 좋기 때문에 global 명령어의 사용은 지양하는것이 좋음
lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 수행
보통 함수를 한줄로 간결하게 만들때 사용
def를 사용해야 할 정도로 복잡하지 않거나 def를 사용 못하는 곳에 주로 사용됨
lambda 매개변수1, 매개변수2, ... : 매개변수를 사용한 표현식 형태로 사용할 수 있음
add = lambda a, b : a+b
result = add(3,4)
print(result) # 7