Eggs Sunny Side Up
본문 바로가기
언어/Python

함수

by guswn100059 2023. 3. 31.

1. 함수란?

- 하나의 특별한 목적의 작업을 수행하기 위해서 독립적으로 설계된 코드들의 집합

 

2. 함수의 구조

def 함수명(매개변수) :
    실행(함수의 기능) 문장1
    실행(함수의 기능) 문장2
    return 반환값(변수)

def number_minus(num1, num2) :
    return num1 - num2

num1 = int(input("첫 번째 정수 입력 >> "))
num2 = int(input("두 번째 정수 입력 >> "))

result = number_minus(num1, num2)
print(result)

# 첫 번째 정수 입력 >> 10
# 두 번째 정수 입력 >> 3
# 7
# 1. 함수 정의
def number_minus(n1, n2) :
    result = n1 - n2
    return result

# 2. 함수 호출(사용)
num1 = int(input("첫 번째 정수 입력 >> "))
num2 = int(input("두 번째 정수 입력 >> "))

number_minus(num1, num2)

# 첫 번째 정수 입력 >> 8
# 두 번째 정수 입력 >> 4
# 4

 

3. 함수의 기본구조 4가지

- 매개변수 X, return X

- 매개변수 O, return X

- 매개변수 X, return O

- 매개변수 O, return O

 

매개변수 X, return X

# 인사하는 함수 정의
def hi() :
    print("안녕")

# 함수 호출(사용)
hi()
result = hi() # hi() 함수가 실행되면서 출력확인용 문장이 출력
print(result) # return 값이 없을 때 변수에 대입하지 않음.
              # return 값이 없는 것을 확인하기 위해 print() 함수를 사용
              
# 안녕
# 안녕
# None

매개변수 O, return X

# 인사하는 함수 정의
def hi2(name) :
    print(f"{name}! 안녕안녕")
    
# 함수 호출(사용)
hi2("기쁨")
result = hi2("기쁨")
print(result)

# 기쁨! 안녕안녕
# 기쁨! 안녕안녕
# None

매개변수 X, return O

# 인사하는 함수 정의
def hi3() :
    return "안녕안뇽"

# 함수 호출(사용)
hi3()
result = hi3()
print(result) # return 값에 의한 출력

# 안녕안뇽

매개변수 O, return O

# 인사하는 함수 정의
def hi4(name) :
    return f"{name}! 안녕안뇽"

# 함수 호출(사용)
hi4("홍모")
result = hi4('홍모')
print(result) # return 값에 의한 출력

# 홍모! 안녕안뇽

def s_replace(s) :
    result = s.replace("ㅋ", "")
    return result

s = input("문자열 입력 >> ")
s_replace(s)

# 문자열 입력 >> ㅋ을 모두 지워주세요 ㅋㅋㅋㅋㅋ
# '을 모두 지워주세요 '

# 방법 1)
def divisor(num) :
    for i in range(1, num+1) :
        if(num%i==0) :
            print(i, end=" ")
            
divisor(10)

# 1 2 5 10
# 방법 2)
def divisor(num) :
    a = [] # 값을 담아주기 위해 빈 리스트 선언
    for i in range(1, num+1) :
        if(num%i==0) :
            a.append(i) # 약수인 수를 리스트에 추가
    return a # return 키워드를 통해 리스트 반환

divisor(32)

# [1, 2, 4, 8, 16, 32]
잘못된 방법)
# return을 사용하여 함수를 정의할 때
def divisor(num) :
    for i in range(1, num+1) :
        if num%i==0 :
            return i # 함수를 수행하면서 return을 만나면 처음에 들어온 값을 반환하고 종료
        
divisor(10)
# 1

 

return 키워드 정리

- 반환값은 언제나 하나

    예외) num_add, num_sub = number_m(num1, num2) ==> 결과값(num_add, num_sub)

    --> 패킹된 형태로 반환해주기 때문에 결과값은 하나지만 실제 보이는 값은 여러 개.

- 함수 안에서 return은 1번 실행

- 함수 안에서 return을 만나면 함수가 끝난다.

# 더하고, 빼는 기능을 하는 함수 정의
def number_m(n1, n2) :
    return n1+n2, n1-n2

# 함수 호출(사용) => 패킹된 형태로 결과를 반환
number_m(5, 2)

# (7, 3)
# 더하고, 빼는 기능을 하는 함수 정의
def number_m(n1, n2) :
    return n1+n2, n1-n2

# 함수 호출(사용) => 패킹된 형태로 들어온 결과를 a1, b1 변수에 언패킹
a1, b1 = number_m(5, 4)
print(a1, b1)

# 9 1

 

함수 독스트링(docstring)

- 함수에 대한 기능 설명하는 문장

=> shift + Tab 으로 세부사항 확인할 수 있음.

 

함수 매개변수 기본값 설정

print("3교시", end=" ")
print("점심시간")

# 3교시 점심시간

가변 매개변수(*)

- 함수 호출 시, 몇 개의 인수가 전달될지 알 수 없다면, 사용자가 직접 매개변수의 개수를 정할 수 있도록 선언

# 더하는 기능을 하는 함수 정의
def add(*args) :
    return sum(args)
# 가변 매개변수를 받아서 모든 숫자를 더한 결과를 반환하는 함수
# sum() 내장함수 이용

add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
# 66

add(10, 20, 30)
# 60

 

가변 매개변수(**)

- 딕셔너리 형태로 함수 내부를 처리하고 싶을 때

# 함수 정의
def print_map(**kwargs) :
    print(kwargs)
    for key, value in kwargs.items() :
        print(key, "/", value)
        
# 함수 호출
print_map(하나 = 1, 둘 = 2)

# {'하나': 1, '둘': 2}
# 하나 / 1
# 둘 / 2

 

네임스페이스(namespace, 이름공간)

- 빌트인 네임스페이스 : 기본 내장함수 / 내장 예외들의 이름 => 최상위 네임스페이스

- 전역 네임스페이스 : Global, 모듈 전체에서 통용될 수 있는 이름

- 지역 네임스페이스 : Local, 함수 내에서만 통용되는 이름

- 프로그래밍 언어에서 특정한 객체를 이름에 따라 구분할 수 있는 범위

x = 9 # x는 전역 변수
print("함수 밖 : ", x)

def temp() :
    x = 10 # x는 temp의 지역 변수
    print("함수 안 : ", x)
temp()

# 함수 밖 :  9
# 함수 안 :  10
# 함수 정의
num = 0 # 전역변수

def temp() :
    num = 1 # 지역변수
    print("함수 안 : ", num)
    
print("함수 밖 : ", num)

# 함수 호출
temp()

# 함수 밖 :  0
# 함수 안 :  1
# 함수 정의
num = 0 # 전역변수
print("함수 밖 : ", num)

def temp() :
    global num # num을 전역변수로 사용하겠다.
    num = 1 # 지역변수
    print("함수 안 : ", num)
    
# 함수 호출
temp()

print("함수 밖 : ", num)

# 함수 밖1 :  0
# 함수 안 :  1
# 함수 밖 :  1

 

'언어 > Python' 카테고리의 다른 글

Numpy  (0) 2023.04.01
모듈  (0) 2023.03.31
딕셔너리  (0) 2023.03.31
반복문  (0) 2023.03.31
tuple(튜플)  (0) 2023.03.29

댓글