함수(03 09)

1-3 반환값이 있는 함수

def 함수명(변수1, 변수2, ...):
  함수가 호출되면 실행할 문장
  ...
  return 값

# 호출
함수명(값1, 값2, ...)
def func4():
  print("hello python")

a = func4()

print(f'a에 저장된 값은: {a}')
a에 저장된 값은: None
# return 값이 없기 때문에 None이 나오게 된다.
def func5():
  return '🎁'

present = func5()
print(f"present에 저장된 값은: {present}")
# present에 저장된 값은: 🎁
def func6(num1, num2):
  sum = num1 + num2
  return sum

result = func6(10)
print(result)
# TypeError: func6() missing 1 required positional argument: 'num2'

result = func6(10, 5)
print(result)
# 15

func6이라는 함수는 num1과 num2 두 변수에 해당하는 값을 입력해야 하는데 결과에 변수가 하나만 포함되어 있어서 오류가 발생합니다.

그러나 각각 num1과 num2에 해당하는 값을 입력하면 결과 값이 올바르게 반환됩니다.

※ 함수 내부에서 생성한 변수를 외부에서 사용하면 에러가 나지 않을까요?

print(num1, num2)
# NameError: name 'num1' is not defined

내 대답은 아니오 야.

변수 num1은 함수 내부에서 생성되었기 때문에 함수 외부에서 사용할 수 없습니다.

1-4 기본 매개변수

  • 변수를 값으로 미리 채우는 함수
  • 기본 매개변수는 첫 번째 매개변수에 적용할 수 없습니다.
def 함수명(변수1 = 값1, 변수2 = 값2, ...)
  함수가 호출되면 실행할 문장
  ...
  return 값

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

# default 매개변수 있을 때 호출방법
변수 = 함수명()
def func6(num1 = 1, num2 = 1):
  sum = num1 + num2
  return sum

print(func6())
# 2

print(func6(10, 5))
# 15

result = func6(7, 3)
print(result)
# 10
  • 값을 입력하지 않으면 설정값 2가 나옵니다.
  • 값을 추가하기 때문에 값이 변경됩니다.

1-5 가변 개수의 매개변수가 있는 함수

  • 변수 매개변수를 전달하는 경우 함수 내에서 튜플 형태로 사용하십시오.
def 함수명(*변수):
  함수가 호출되면 실행할 문장
  ...
  return 값

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

# 호출
변수 = 함수명(값) 

# 호출
변수 = 함수명()
def func7(*args):
  result = 0
  print(args)

print(func7())
# ()
# None

print(func7(10, 30, 20, 70))
# (10, 30, 20, 70)
# None

def func7(*args):
  result = 0
  for i in args:
    result += i
  return result

print(func7())
# 0
print(func7(10, 30, 20, 70))
# 130
  • None이 나오는 이유: 인쇄물에 인쇄가 인쇄되어 반복의 부재로 나타나기 때문입니다.
  • 그러나 print 대신 return으로 반환하면 None이 출력되지 않습니다.

1-6 매개변수를 사전 구조로 받는 함수

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

  return 값
  
# 호출
변수 = 함수명(변수1 = 값1, 변수2 = 값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
  • 매개변수 이름과 사전 키는 동일해야 합니다.
  • 사전 키는 문자열 형식이어야 합니다.
  • 함수를 호출할 때 * 만 사용하면 키가 저장됩니다.
def func9(**args):
  print(args)
  
dic1 = {'id': 'apple', 'name':'김사과', 'age':20}
user = func9(id = 'apple', name="김사과", age = 20)

user
# {'id': 'apple', 'name': '김사과', 'age': 20}


def func9(**args):
  #print(args)
  for i in args:
    if i == 'id':
      id = args(i)
  return id

user = func9(id = 'apple', name="김사과", age = 20)
print(user)
# apple

def func10(num1, num2 = 1):
  sum = num1 + num2
  return sum

print(func10(10, 3))
# 13
print(func10(1))
# 2
  • 함수가 이미 매개변수의 값을 미리 지정했다면,
    • 두 개의 매개변수에 대한 값을 제공하면 두 개로 계산됩니다.
    • 매개변수에 값을 지정하면 와 기본값을 사용하여 계산됩니다.

1-7 반환 값이 여러 개인 함수

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

  return 값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(result1)
# 13
print(result2)
# 7
print(result3)
# 30
print(result4)
# 3.3333333333333335

# 곱셈의 결과만 필요할 때
# 언더바(_) 사용
_, _, result3, _ = func10(10, 3)

print(result3)
# 30