본문 바로가기
Python/Basic

[파이썬, Python] 함수 - 1️⃣ 사용자 정의 함수

by coding-choonsik 2023. 3. 9.
728x90
반응형
SMALL

1. 함수란❓

  • 변수 x, y에 대해 x값이 정해지면 그에 따라 y값이 결정되는 것
  • 반복적으로 사용되는 가치 있는 부분을 묶어서 하나의 집합으로 만듦
  • 코드를 재활용하기 위한 목적
  • 파이썬에서의 함수 만들기: def 키워드 사용

1-1. 이름만 있는 함수

  • 함수 정의 
def 함수명():
  함수가 호출되면 실행할 문장
  ...
  • 함수 호출
함수명()

  • 사용자 정의 함수를 만들어보자.
def func1():
  print('처음으로 만든 함수에 의해 출력됩니다')
  
  
func()
>>> 처음으로 만든 함수에 의해 출력됩니다

func()
>>> 처음으로 만든 함수에 의해 출력됩니다
func()
>>> 처음으로 만든 함수에 의해 출력됩니다   # 호출할 때 마다 반복적으로 사용 가능

# for문을 이용하여 함수 사용하기
for i in range(5):
  func1()

>>> 처음으로 만든 함수에 의해 출력됩니다
처음으로 만든 함수에 의해 출력됩니다
처음으로 만든 함수에 의해 출력됩니다
처음으로 만든 함수에 의해 출력됩니다
처음으로 만든 함수에 의해 출력됩니다

 

1-2. 매개변수가 있는 함수

  • 함수 정의 
def 함수명(변수1, 변수2, ...):
  함수가 호출되면 실행할 문장
  • 함수 호출
함수명(값1, 값2, ...)     # 변수에 들어갈 값 입력

  • 매개변수가 있는 함수를 만든 후 호출해보자.
# 숫자를 입력받아 출력해주는 함수 만들기
def func2(num):
  print(f'입력받은 숫자: {num}')
  
func2(10)
>>> 입력받은 숫자: 10

func2(4)
>>> 입력받은 숫자: 4

# 문자열이 들어가도 출력됨
func2('s')
>>> 입력받은 숫자: s

# 처음 숫자와 끝 숫자를 입력받아 두 수 사이의 총합을 구하는 함수 만들기
def func3(start, end):
  sum = 0
  for i in range(start, end+1):
    sum += i

  print(f'{start}부터 {end}까지의 총 합: {sum}')
  
  
func3(1,10)   
>>> 1부터 10까지의 총 합: 55

func3(100, 500)
>>> 100부터 500까지의 총 합: 120300

1-3. 리턴값이 있는 함수

  • 함수 정의
def 함수명(변수1, 변수2, ...)
  함수가 호출되면 실행할 문장
  ...
  return 값
  • 함수 호출
변수 = 함수명(값1, 값2, ...)   # 변수에 return값이 저장

  • return값이 없고 print로 값을 출력하는 함수와 비교해보기
def func4():
  print('안녕하세요 파이썬!')
  

a = func4()   
print('a에 저장된 값:{}'.format(a))

>>> 안녕하세요 파이썬!
a에 저장된 값:None    # func4가 리턴하는 값이 없기 때문에 변수a에 저장된 값이 없음

def func5():
  return '🍣'

# return 값을 변수에 저장하기
susi = func5()
print('susi에 저장된 값:{}'.format(susi))

>>> susi에 저장된 값:🍣

def func6(num1, num2):
  sum = num1 + num2
  return sum

result = func6(10)
print(result)


>>> TypeError: func6() missing 1 required positional argument: 'num2'
# 매개변수를 2개 입력받게 함수를 만들었기 때문
result = func6(10, 20)
print(result)
>>> 30

  • num1과 num2 변수의 범위
    • 함수안에서 정의된 변수는 지역함수(local)
    • 지역함수(local) : 함수의 바깥에서 사용할 수 없음
print(num1)
>>> NameError: name 'num1' is not defined

print(num2)
>>> NameError: name 'num2' is not defined

print(sum)
>>> <built-in function sum>

  • return 값이 있는 함수는 코드를 재활용할 수 있도록 유연하게 작성할 수 있음
# 예시

# 1번) print로 값을 출력하는 함수
def test1():
  print('안녕하세요')

# 2번) 값을 return 하는 함수 
def test2():
  return '안녕하세요'
# 동일한 결과를 출력
print(test1())
>>> 안녕하세요
print(test2())
>>> 안녕하세요

# test1의 경우는 픽스된 값만 출력하는 코드기 때문에 응용하여 사용하기 어려움.
str1 = test2()
print(str1, '파이썬')
>>> 안녕하세요 파이썬

1-4. 디폴트 매개변수가 있는 함수

  • 함수가 호출될 때 값을 넣지 않아도 함수 정의 시 변수의 값을 지정하여 호출될 때 기본값으로 나오게 됨
  • 함수 정의
def 함수명(변수1=값1, 변수2=값2, ...):
  함수가 호출되면 실행할 문장
  ...
  return 값
  • 함수 호출
변수 = 함수명(값1, 값2, ...)
변수 = 함수명()

  • 매개변수를 기본값으로 설정하지 않은 함수와 비교해보기
# 매개변수의 기본값을 설정하지 않은 함수
def func6(num1, num2):
  sum = num1 + num2
  return sum
  
print(func6())  # 매개변수를 설정해야 함
>>> TypeError: func6() missing 2 required positional arguments: 'num1' and 'num2'
def func6(num1=5, num2=2):
  sum = num1 + num2
  return sum

# 매개변수를 입력하지 않았을 때 기본값으로 함수에 입력됨
result = func6()   
print(result)
>> 7         

# 매개변수를 다른 값으로 주어지면 기본값이 아닌 주어진값으로 계산됨
result = func6(10,20)  
print(result)
>>> 30

 

  • 매개변수를 하나만 입력하고 함수를 호출해보자.
# 첫번째 매개변수의 디폴트값과 입력한 매개변수가 계산됨
func6(2)
>>> 4

  • 매개변수를 여러개 입력받을 때 디폴트값을 첫번째 매개변수에만 지정하여 함수를 만들 수 없음.
def func_test(num1=5, num2):
  sum = num1 + num2
  return sum
  
>>> SyntaxError: non-default argument follows default argument
def func_test1(num1, num2=5):
  sum = num1 + num2
  return sum
  
func_test1(10,20)
>>> 30

1-5. 매개변수의 개수가 가변적인 함수

  • 함수 호출 시 매개변수의 수가 변동될 때 사용
  • 가변적인 매개변수를 전달할 경우 함수 안에서 튜플 형태로 사용

 

  • 함수 정의
def 함수명(*변수):
  함수가 호출되면 실행할 문장
  ....

  return 값
  • 함수 호출
변수 = 함수명(값1, 값2, ... ) # 호출
변수 = 함수명(값1)   # 호출
변수 = 함수명()

  • 변수로 주어진 값을 모두 더하는 함수를 만들어보자.
def func7(*args):  # args: 한꺼번에 매개변수들을 받는 경우 관례적으로 쓰는 변수명
  result = 0
  # print(args)   
  for i in args:   # args: iterable한 튜플
     result += i
  return result
  
print(func7())                  # 매개변수를 주지 않을 때
>>> 0
print(func7(10, 30, 20, 60))    # 매개변수가 여러개
>>> 120
print(func7(10))                # 매개변수를 하나만 줄 때
>>> 10

1-6. 매개변수를 딕셔너리 구조로 전달받는 함수

  • 매개변수명과 딕셔너리의 key가 같아야하고, 입력하는 순서도 같아야함
  • 딕셔너리의 key는 반드시 문자열 형태

 

  • 함수 정의
def 함수명(**변수):
  함수가 호출되면 실행할 문장
  ...

  return 값
  • 함수 호출
변수1 = 함수명(변수값1, 변수값2, ...)
def func8(id, name, age):
  print(f'아이디: {id}')
  print(f'이름: {name}')
  print(f'나이: {age}')
  
dic1 = {'id':'apple', 'name':'김사과', 'age':20}

# 딕셔너리 구조로 함수에 넣어줄 때
func8(**dic1)
>>> 
아이디: apple
이름: 김사과
나이: 20


func8(*dic1) 
>>>  
아이디: id
이름: name
나이: age       # *의 데이터를 보낼경우 key가 저장됨

def func9(**args):
	# print(args)             # {'id': 'apple', 'name': '김사과', 'age': 20}
	for i in args:
    print(i)                  # i는 key값
    if i == 'id':
      id = args[i]			  
  return id					  # dict에서 id의 value값을 return
  
 
# 매개변수에 값을 주면(딕셔너리구조로 만들어줌)
user = func9(id = 'apple', name='김사과', age=20)  
print(user)
>>> apple

1-7. 리턴값이 여러개인 함수

  • 함수 정의
def 함수명(변수1, 변수2, ...)
  함수가 호출되면 실행할 문장


  return 값1, 값2 ...
  • 함수 호출
변수1, 변수2, ... = 함수명(값1, 값2, ...)

  • 두 숫자를 매개변수로 받아 두 수의 덧셈, 뺄셈, 곱셈, 나눗셈을 하여 값을 저장하는 함수를 만들어보자.
def func10(num1, num2):
  return num1 + num2, num1 - num2, num1 * num2, num1 / num2
  
  
result1, result2, result3, result4 = func10(10, 3) 
print('덧셈: {}, 뺄셈: {}, 곱셉: {}, 나눗셈: {}'.format(result1, result2, result3, result4))

>>> 덧셈: 13, 뺄셈: 7, 곱셉: 30, 나눗셈: 3.3333333333333335

  • 여러개의 return값 중 사용하고자 하는 값만 변수에 담고 싶을 땐 _를 이용한다.
def func10(num1, num2):
  return num1 + num2, num1 - num2, num1 * num2, num1 / num2

_, _, result3, _ = func10(10, 3) 
print(result3)

>>> 30

1-8. 함수의 작성을 나중에 하고 싶을 때

def func11():
	pass

 

728x90
반응형
LIST