파이썬 기초 문법이 궁금하신 분들은
제 벨로그의 파이썬 왕초보 시리즈를 추천 드립니다.
구글 코랩이나 주피터 노트북에서 직접 작성하며 풀어보세요.😊
여태까지는 파이썬에서 제공하는 함수를 배웠다.
신기하게도 파이썬에서는 함수를 직접 만들 수 있다.
파이썬에서 함수는 '어떤 일을 수행 후 그 결과를 내어놓는 것'이라고 생각하면 더 이해하기 쉽다.
함수는 이렇게 만들면 된다.
def 함수명(매개변수):
수행할 문장 1
수행할 문장 2
return 결과값
여기서 주의할 점은 print와 return은 다르다는 것이다.
print도 출력하는 것이긴 하지만 함수의 output은 아니다.
함수에서 output은 무조건 return이라는 걸 기억하자.
print는 그냥 보여주기만 하는 용도일 뿐이다.
예를 들어, a와 b의 합을 결과값으로 나타내는 함수를 만들어보자.
def solution(a, b):
answer = a + b
return answer
a와 b의 합을 결과값으로 가지는 함수인 solution을 내가 만들었다.
256과 619의 합을 solution함수로 구해보자.
더 간단하게 이렇게 적어도 된다.
def solution(a, b):
return a + b
return과 print의 차이는 아래 사진을 통해 확인해보자.
두 번째 코드에서는 return값, 즉 output이 없다.
그러자 c를 print하니 아무것도 없다고 출력이 된다.
이처럼 함수에 항상 input과 output을 적어줘야 하는 것은 아니다.
아래 설명을 보자.
아래 코드처럼 매개변수(=input)에 아무것도 적지 않을 수도 있다.
def say():
return 'Hi'
위 코드는 내가 만든 say 함수다.
이제 say() 를 돌리면 Hi 가 나온다.
아래 이미지는 구글 코랩에서 직접 돌린 결과다.
이처럼 input값이 없어도 output값이 나올 수 있다.
반대로 output값 없이 print까지만 적을 수도 있다.
def add(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b)
여기서는 input이 있어도 output이 없을 수도 있구나 까지만 알아도 된다.
def say():
print("Hi")
input도 없고 return 즉 output도 없는 모습이다.
이처럼 파이썬에서 함수를 만들 때는 마음대로 만들 수 있다.
알쏭달쏭하겠지만 일단은 내 마음대로 함수 이름, input, 규칙, output 등을 만들 수 있구나 정도로만 알고 있어도 된다.
def 함수이름(*매개변수):
수행할 문장
def 함수이름(매개변수1, *매개변수):
수행할 문장
input 앞에 * 을 붙이면 된다.
이렇게 하면 입력값이 여러 개일 때 그 여러 개를 하나로 묶어주는 역할을 한다.
input으로 딕셔너리를 넣을 수도 있다.
def 함수이름(**매개변수):
수행할 문장
위 코드처럼 input 앞에 ** 을 붙이면 된다.
입력값을 딕셔너리로 변환하겠다는 뜻이다.
if 조건문을 사용하면 된다.
def say_nick(name):
if name == "바보":
return
print("나의 별명은 {}입니다.".format(name))
return 뒤에 아무것도 안 적으면 끝내버리라는 뜻이다.
위 코드를 해석해보자.
"바보"라고 넣자 내가 만든대로 아무런 결과를 내지 않았다.
참고로 맨 마지막에 print가 아닌 return을 쓰면 맨 마지막에 사용한 함수의 결과만 나타낸다.
return을 써서 각각의 값을 보여주고 싶다면 함수 앞에 print를 쓰면 된다.
디폴트로 들어가는, 그러니까 기본값으로 들어가는 input을 설정해줄 수도 있다.
def say_myself(name, man=True):
위 함수를 해석해보면
input으로 name과 man을 넣어줘야 하는데
만약 man을 넣지 않더라도 man의 자리에는 기본값, 즉 디폴트로 True를 넣어준다는 뜻이다.
이 말은 man을 넣지 않더라도 man의 자리에 기본적으로 man이 들어간다는 뜻이다.
무슨 말인지 잘 모르겠다면 아래의 예시를 보자
위 캡쳐 사진의 코드를 해석해보자.
이런 이유로 나는 say_nick()함수 안에 '당근'이라는 매개변수 하나만 넣었지만, 결과 값에는 '남자입니다.'도 함께 나온 것을 알 수 있다.
이렇게 '매개변수=특정값' 식으로 적어서 기본값을 설정할 수 있다.
True 말고 다른 값을 넣어보자.
def intro(name, age, gender=5):
위 함수를 해석해보면
input으로 name과 age와 gender을 넣어줘야 하는데
만약 gender을 넣지 않더라도 gender의 자리에는 기본값, 즉 디폴트로 5를 넣어준다는 뜻이다. 그러니까 gender 자리의 기본값은 5다.
함수 안에서 사용되는 변수는 함수 안에서만 사용된다.
무슨 말인지 아래 코드와 함께 알아보자.
a = 1
def test(a):
a = a + 1
위의 코드를 보면 변수 a가 두 개다.
하나는 첫 번째 줄의 a = 1에 있는 a,
다른 하나는 세 번째 줄의 a = a + 1에 있는 a이다.
첫 번째 변수는 함수 바깥에 있고
두 번째 변수는 함수 안에 속해있다.
함수 바깥에 있는 변수를 전역변수,
함수 안에 속한 변수를 지역변수라고 하며
사람이 보기엔 똑같이 변수 a로 인식되지만
컴퓨터에겐 서로 완전히 다른 변수다.
그래서, 컴퓨터한테 "내가 지금 함수 안에서 사용하는 변수는 함수 바깥에 있는 변수랑 똑같은 애야!"라고 알려주고 싶다면 global 함수를 사용해야 한다.
a = 1
def test(a):
global a
a = a + 1
조금 다르게 변형해서 코드를 돌려보았다.
람다 라고 읽는다.
def로도 함수를 만들 수 있지만
lambda로도 함수를 만들 수 있다.
lambda로는 아주 간단하게 함수를 만들 수 있다.
예를 들어 맨 처음 만들었던 solution 함수를 보자.
def solution(a, b):
return a + b
위 함수를 lambda로 만들면 아래처럼 한 줄로 만들 수 있다.
solution = lambda a, b: a + b
코드를 해석해보면,
input으로 a와 b가 들어오면 a와 b를 더하라는 소리다.
한 번 실행해보자.
영어의 재귀대명사가 기억나는가?
재귀함수는 그처럼 '내가 나를 부르는 함수'라고 생각하면 된다.
아래 예시를 보자.
아래 코드는 팩토리얼을 만들어주는 함수다.
팩토리얼은 해당 숫자 이하의 요소를 전부 곱해주는 것이다. 기호는 느낌표다.
예시) 5! = 5 x 4 x 3 x 2 x 1
def fac(n):
a = 1
for i in range(1, n+1):
a = a * i
return a
input으로 5를 넣고 돌려보면 아래처럼 나온다.
위 코드를 재귀함수를 활용해서 다시 써보겠다.
def fac(n):
if n == 1:
return 1
else:
return n * fac(n-1)
위 코드를 해석해보자.
만약 n이 1이라면 1이 나온다.
n이 1이 아니라면 'n 곱하기 fac(n-1)'이 나온다.
예를 들어 n이 5라면
5 곱하기 fac(4)다.
그런데 fac(4)는 4 곱하기 fac(3)이다.
그런데 fac(3)은 3 곱하기 fac(2)다.
그런데 fac(2)는 2 곱하기 fac(1)이다.
fac(1)은 1이다.
그래서 위 함수는 5 x 4 x 3 x 2 x 1 이 나온다.
여기까지 파이썬에서 함수를 만드는 방법에 대한 내용이었습니다.
수정이 필요한 부분이나 이해가 안 가는 부분이 있다면 언제든 말씀해주세요!^0^
다음 글에서는 함수 만들기 관련 실습 문제를 풀어볼게요.
그럼 이만
총총