Python 사용자 정의 함수

강경록·2022년 6월 4일

Python

목록 보기
9/9
post-thumbnail

오늘 배워볼 내용은

사용자 정의 함수
입니다.

우리가 함수를 만들어서 사용할 수 있습니다.

python은 편리함이 있지만 효율성 부분에서 다른 프로그래밍 언어에 비해
약간의 효율성이 떨어집니다.

제가 알기로는 그렇게 알고있습니다.

그래서 효율성을 따지는 프로그램을 만들 때에는
C/C++, Java 등을 사용한다고 하지만..

화성에 쏘아올린 탐사선에서 지속적으로 정보전달을 해주는 기능을
C 인가 C++ 인가로 프로그래밍 했다고 하는데
저도 그냥 지나치듯 들은거라 정확하지는 않지만 그렇습니다..

오늘도 배우러 가볼까요?

def 사용자 정의 함수

이제 점점 코딩테스트에 관심을 가지시거나 이미 해보신 분들도 있으실텐데

대부분의 테스트에서 언어를 python3 으로 설정해서 하신다면

def solution():
	"""
    """
	return answer

이런 식의 문제가 많을 겁니다.

네 맞아요.

우리가 함수를 만들어서 제출을 하면 함수에 인자들을 넣어서
테스트 해보는 겁니다.

그 과정에서 시간복잡도나 효율성을 따지는겁니다.

알고리즘을 배워보신 분들이라면 알겁니다.
알고리즘이 괜히 있는 건 아니지요.

이제 사용자 정의 함수를 만들어볼까요?

def 함수 만들기

먼저 간단한 함수를 만들어 볼게요.

사용자가 함수에 두 개의 숫자를 넣으면

" 덧셈, 뺄셈, 곱셈, 나눗셈 " 을 해주는 함수를 만들어 볼게요.

def calculator(num1, num2):
    num1 = int(num1)
    num2 = int(num2)
    
    answer = [num1 + num2,
              num1 - num2,
              num1 * num2,
              num1 / num2]
    
    return answer

이렇게 코드를 작성해 봤습니다.

" 근데 저거 만들고 실행하니까 아무것도 안나오는데요?;; "

그럼 우리가 만든 함수를 활용해보겠습니다.

위 코드 밑에 저 함수를 불러 볼까요?

calculator()
# 이렇게 불러오는 겁니다.
# 하지만 이렇게만 불러온다면 오류가 발생할 겁니다.
# 왜냐하면 변수를 안넣어 줬거든요!
# 변수를 넣어 볼까요? 원하는 숫자 두개를 밑에 예시처럼 넣어줍니다.

print(calculator(10, 20))

>>> [30, -10, 200, 0.5]

짜잔!

이렇게 나옵니다.
우리는 지금 계산기를 만들었어요.

그럼 좀더 심화적으로 함수를 만들어 볼까요??

우리가 어떤 연산을 할지 선택해서 결과를 불러오는 프로그램을 만들어 보겠습니다.

그러려면 어떤 함수를 써줘야 우리가 요청한 결과를 불어와 줄까요?

잠시 생각한번 해보시고 밑에 코드를 봐주시기 바랍니다!

def calculator(num1, num2, request):
    num1 = int(num1)
    num2 = int(num2)
    
    
    if request == '+':
        answer = num1 + num2
    elif request == '-':
        answer = num1 - num2
    elif request == '*':
        answer = num1 * num2
    elif request == '/':
        answer = num1 / num2
    else:
        answer = '원하는 연산을 확인해주시고 다시 실행해주세요.'
    
    
    return answer

이렇게 만들어 봤습니다.

코드를 잠시 설명드릴게요.

calculator 함수에 아무것도 넣지 않으면 오류가 생길거니 그건 문제없습니다.

request 변수에 '+', '-', '*', '/' 를 제외한 변수는
>>>	'원하는 연산을 확인해주시고 다시 실행해주세요.'
라고 출력 시킵니다.

직접 한번 실행해볼까요??
print(calculator(10, 20, '+'))
print(calculator(10, 20, '-'))
print(calculator(10, 20, '*'))
print(calculator(10, 20, '/'))
print(calculator(10, 20, 'x'))

>>> 30
    -10
    200
    0.5
    원하는 연산을 확인해주시고 다시 실행해주세요.

근데 이렇게 생각하시는 분들이 있을거에요.

나는 코드에서 변수를 넣고싶은게 아니라 함수를 실행시켜서 내가 직접 입력하고싶어요!

그럼 전에 배웠던

input()

함수를 쓰시면 됩니다.

def calculator2():
    
    num1 = int(input('첫 번째 정수를 입력하세요 : '))
    num2 = int(input('두 번째 정수를 입력하세요 : '))
    print('연산자 선택 : +, -, *, /')
    request = input('위의 연산자 중 하나를 고르세요 : ')
    
    if request == '+':
        answer = num1 + num2
    elif request == '-':
        answer = num1 - num2
    elif request == '*':
        answer = num1 * num2
    elif request == '/':
        answer = num1 / num2
    else:
        answer = '원하는 연산을 확인해주시고 다시 실행해주세요.'
    
    
    return answer
calculator2()

이렇게 하시고 직접 실행해보세요.

근데 출력을 할 때 print 를 쓴다고 했는데 왜 안써도 출력이 되죠?

그게 python의 장점입니다.
꼭 print 로 해줄 필요없습니다.

특히나 함수는 더욱이 그렇죠.
잠깐 예시 하나만 드릴게요

1+1

>>> 2
30 * 210

>>> 6300

이런 느낌입니다.

근데 왜 저는 프린트를 썼냐고요??
그 이유도 보여드릴게요.

1+1
30 * 210

>>> 6300

이렇게 나옵니다.
출력값을 여러분 들에게 보여주기 위해서 print 로 줄을 나눴던 겁니다.

어떤 느낌인지 아시겠죠?
그럼 함수를 print 해볼까요?

아까 만든 calculator 함수를 프린트 해보겠습니다.

print(calculator)

>>> <function calculator at 0x0000025FA2FE56C0>

이런 식으로 나오고

print(calculator())

>>> TypeError: calculator() missing 3 required positional arguments: 'num1', 'num2', and 'request'

이러면 또 실행이 됩니다.

저는 단순히 출력되는 것을 명확히 보여드리기 위함이니
자유롭게 선택해서 쓰시면 되겠습니다.

def 함수의 가변 매개변수

이거는 제가 많이 써보지는 않았지만 간단하게 설명 먼저하고 직접 보여드리겠습니다.

위에서는 꼭 정해진 부분에 변수를 지정해줬어야 합니다.
사용자 정의 함수에 꼭 정해진 갯수를 넣지 않아도 함수를 실행하려면 어떻게 해야할까요?

그래서 있는 것이 ' 가변 매개변수 ' 입니다.

' 가변 '
변할 수 있다는 거죠?

코드를 보겠습니다.

def introduce(*values):
	return values
    
introduce('안녕하세요', '제 이름은', '김덕순 입니다.')

>>> ('안녕하세요', '제 이름은', '김덕순 입니다.')

분명 함수에

def introduce(*values):

이렇게 *values 만 써줬는데 여러개의 변수를 받는 것을 보셨죠?

가변 매개변수 뒤에는 일반 매개변수를 넣을 수 없습니다.

사실 저는 이 기능은 배워놓고 거의 쓴적이 없어서
여러분들에게 알려드릴지 말지 고민했는데 그래도 알려드리는게 좋을거 같아서
알려드립니다.

def 함수의 기본 매개변수

이번에는 기본 매개변수인데
이건 정말 쉽습니다.

지금까지 우리는 모든 변수에 알맞게 값을 넣어줬죠?

하지만 기본 매개변수는 이미 지정된 매개변수라서 넣지 않아도 알아서 저장되어있는
매개변수 입니다.

def hello(hello, n=10):
    return hello * n
    
hello('안녕?')

>>> 안녕?안녕?안녕?안녕?안녕?안녕?안녕?안녕?안녕?안녕?

뭔지 아시겠죠??

이 역시 마찬가지로 기본 매개변수 뒤에는 일반 매개변수가 올 수 없습니다.

그럼 기본과 가변 매개변수를 같이 쓰려면 어떻게 해야하나요?

가변 매개변수를 기본 매개변수보다 앞에 쓰면 됩니다.

자!

다시 돌아와서 기본매개변수는 우리가 변경할 수도 있습니다.

# hello() 함수를 이용해 보겠습니다.

hello('안녕?', n=3)

>>> '안녕?안녕?안녕?'

이렇게도 가능합니다.

하나를 알려주면 10000을 아는 여러분들은 다른 상황에서도 쓸 수 있다는 것을 아시겠죠?

return

코드에서 함수의 마지막에 return 이라는 것이 보이시죠?
간단하게 생각하시면 됩니다.

return은 끝입니다.

def example():
    print('1번째 출력')
    return

    print('2번째 출력')
    
example()

>>> 1번째 출력

2번째 출력은 안나오죠??

이건 사실 파이썬 좀 해보신 분들은 저 코드를 보고
괴상한 코드라고 할 겁니다.

굳이 출력도 안되는 걸 넣어놔서 용량만 차지할 뿐입니다.

이 부분도 알고 계시면 될거같습니다.


마무리

이번 내용은 여기까지 입니다.

좀 어려울 수 있기 때문에 함수도 만들어보시고
직접 사용해 보세요.

저의 개인적인 팁을 말씀드리자면

코딩하다가 귀찮은 부분이 분명있습니다.
아 이거 또 해야하는데 일일이 코드 복붙 하기도 귀찮고...

그러면 여러 경우를 한번에 통일 시켜버리면 좋겠죠?
그런 함수들을 그냥

def 어쩌구저저구():
	또 사용할 코드 쌸라 쌸라....`~~!!~!!~#@!$~!@
	return

이렇게 넣어버리고 사용합니다.
아마 모든 사람들이 저렇게 쓸테니까 저만의 팁이라기 보다는 그냥
정보 공유였네요.

아무튼 저렇게 하시면 됩니다.

이번 글 부터 다음에 작성할 글들은 저도 공부중인 부분이라
설명이 애매하고 불친절 할 수 있지만 열심히 설명 드리도록 하겠습니다.

다들 즐겁게 코딩하시고
스트레칭도 하면서 하루 마무리 잘하세요

부족한 글 읽어주셔서 감사합니다
빠이~

profile
데이터를 배우는 나의 인생

0개의 댓글