1. 함수란 ?

🚀  '코드의 집합'을 의미 def 키워드 사용함

🚀   함수 용어 정리
        a. 인수 : 함수에 전달할 입력(input)을 의미. argument
        b. 매개변수 : 인수를 받아서 저장하는 변수를 의미. parameter
        c. 반환값 : 함수의 출력(output)을 의미. return
        d. 함수 호출 : 만들어진 함수를 실제로 사용하는 것을 의미

def 함수이름(매개변수):
    본문
    return 반환값
    
# 함수이름을 개발자가 마음대로 결정가능
# 매개변수, 반환값은 필수 사항이 아님

# 함수 호출
변수 = 함수이름(인수)
# 함수의 호출 결과를 저장할 변수를 생략 가능

 

  ⚡️  4가지 함수 호출 형태


       1) 인수: x, 반환값: x
           함수이름()
       2) 인수: o, 반환값: x
           함수이름(인수)
       3) 인수: x, 반환값: o
           변수 = 함수이름()
       4) 인수: o, 반환값: o
           변수 = 함수이름(인수)


# welcome() 함수 정의
def welcome():
    print('Hello Python')
    print('Nice to meet you')

welcome()  # 함수가 정의된 후에 호출을 해야 함
# Hello Python
# Nice to meet you

# 파이썬 함수의 단점 : 데이터 타입이 없어서 다른 작업자가 만든 함수를 사용할 때 주의할 점이 많다.
def process(number):
    return number / 1

process("hello")  # TypeError: unsupported operand type(s) for /: 'str' and 'int'

# 어노테이션 사용 가능. 타입 강제는 아님
def process(number: int) -> float:
    return number / 1

# 파이썬의 함수는 객체이고 자료형이다.
def charge(energy):
    if energy < 0:
        print('0보다 작은 에너지를 충전할 수 없습니다.')
        return  
    print('에너지가 충전되었습니다.')
    
print(charge)  
# <function charge at 0x10360dcf0>

def print_charge(fun):
    fun(0)  # 에너지가 충전되었습니다.

print_charge(charge)  # 함수를 함수 호출시 인수로 사용이 가능.

# 함수안에 함수 선언도 가능하다.
def print_greet(name):
    def get_greet():
        return '안녕하세요'

    print(name + "님 " + get_greet())

print_greet('김철수')

 

2. 인수와 매개변수

 

1) 인수가 있는 함수

def introduce(name: str, age: int) -> None:
    print(f'내 이름은 {name}이고, 나이는 {age}살 입니다.')

introduce('james', 25)  # 내 이름은 james이고, 나이는 25살 입니다.
introduce(age=25, name='james')  # 내 이름은 james이고, 나이는 25살 입니다.

 


 

2) 가변 매개변수

🚀  함수로 전달해야 하는 인수의 개수가 정해지지 않아도 매개변수를 선언할 수 있음
🚀  가변 매개변수를 만드는 키워드는 애스터리스크(*)
🚀  매개변수 앞에 *를 붙이면 곧바로 가변 매개 변수가 되면서 전달되는 모든 인수를 하나의 튜플(tuple)로 만들어 줌

def show(*args):
    for item in args:
        print(item)

show('python')  # show 함수 호출. 인수가 1개
show('happy', 'birthday')  # show 함수 호출. 인수가 2개

def print_n(n, *values):
    for i in range(n):
        for value in values:
            print(value)
        print()
print_n(3, "안녕하세요", "파이썬 프로그래밍")
'''
안녕하세요
파이썬 프로그래밍

안녕하세요
파이썬 프로그래밍

안녕하세요
파이썬 프로그래밍
'''

 

  👾  가변 매개변수 뒤에 일반 매개변수 올 수 x

  👾  가변 매개변수는 하나만 사용 가능

 


 

3) 기본 매개변수

 

print(value, sep=' ', end='\n', file=sys.stdout)

 

🚀  가장 앞에 있는 value가 '가변 매개변수', 뒤에 '매개변수 = 값' 형태로 되어 있는 것이 '기본 매개변수'

🚀  매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값을 말한다

🚀  기본 매개변수 뒤에 일반 매개변수가 올 수 없다

 

    ⚡️  end : value 출력 후 출력할 문자
                       ▶️ end 속성을 사용하지 않고 print() 함수를 사용하면 출력 후 자동으로 줄 바꿈이 진행
    ⚡️  sep : 출력할 value의 구분자
                       ▶️ sep 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 공백으로 구분
    ⚡️  file : 출력 방향 지정
                       ▶️ file 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 모니터에 출력

print('재미있는','파이썬') # sep 값을 지정하지 않으면 공백이 들어감.
print('재미있는', '파이썬', sep=' ') # 재미있는 파이썬 / 콤마(,)로 구분된 출력 대상은 공백으로 구분
print('Python','Java', 'C', sep=':') #Python:Java:C / sep 속성으로 구분
'''
재미있는 파이썬
재미있는 파이썬
Python:Java:C
'''

print('영화 타이타닉', end='\n') # 지정하지 않았을 때 기본값은 \n
print('평점', end=':')
print('5점') # 평점:5점 / value 출력 후 end 속성 출력. 줄 바꿈이 되지 않음
'''
영화 타이타닉
평점:5점
'''

fos = open('../02_21/sample.py', mode='wt')
print('print("Hello World")', file = fos) # file 속성으로 대상 출력. 파일 출력
fos.close()

 


 

4) 키워드 매개변수

 A. 기본 매개변수가 가변 매개변수보다 앞에 오는 경우

     - 기본 매개변수의 의미가 사라진다.

def print_n(n=2, *values):
    for i in range(2):
        for value in values:
            print(value)
            
print_n('안녕하세요','즐거운','파이썬 프로그래밍')
# TypeError 발생

 

    📌  n에는 안녕하세요가 들어가고, values에 즐거운, 파이썬 프로그래밍이 들어간다

    📌  range() 함수의 매개변수에는 숫자만 가능하기 때문에 에러가 발생

           ∴  기본 매개변수는 가변 매개변수 앞에 써도 의미가 없다.

 

 

  B. 가변 매개변수가 기본 매개변수보다 앞에 오는 경우

def print_n(*values, n=2):
    for i in range(2):
        for value in values:
            print(value)
            
print_n('안녕하세요','즐거운','파이썬 프로그래밍', 3)

 

 

📌  가변 매개변수가 우선이 되기 때문에 왼쪽과 같은 결과가 나온다.

 

 

 

 

 

 

  C. 키워드 매개변수

     - 매개변수 이름을 지정해서 입력하는 매개변수를 키워드 매개변수라고 한다

def print_n(*values, n=2):
    for i in range(2):
        for value in values:
            print(value)
            
print_n('안녕하세요','즐거운','파이썬 프로그래밍', n=3)
# n=3은 키워드 매개변수

 


 

5) 디폴트 매개변수

🚀  매개변수로 전달되는 인수가 없는 경우에 기본적으로 사용할 수 있도록 매개변수에 기본값을 설정할 수 있음

def greet(message='안녕하세요'):
    print(message)

greet('반갑습니다')  # 반갑습니다
greet()  # 안녕하세요
# -> 자바에서는 오버로딩이라 생각함. 파이썬에는 오버로딩 지원 x.

# 디폴트 매개변수와 일반 매개변수를 같이 사용하는 경우 디폴트 매개변수를 뒤(오른쪽)으로 배치
def greet(name, message= '안녕하세요'):
    print(f'{name}님 {message}')

greet('김철수')  # 김철수님 안녕하세요.
greet('김철수', '반갑습니다')  # 김철수님 반갑습니다

# 복수의 디폴트 매개변수를 사용하는 경우
def greet(name='이철수', message='안녕하세요'):
    print(f'{name}님 {message}.')

greet()  # 이철수님 안녕하세요.
greet('김철수')  # 김철수님 안녕하세요. / 왼쪽 부터 적용.
greet('김철수', '반갑습니다')  # 김철수님 반갑습니다.

 


 

3. 리턴

🚀  함수 호출 결과를 반환값(return value)이라 한다.
🚀  반환값이 있으면 함수 내부에서 return문을 통해 값을 반환할 수 있고,
      반환값이 없으면 함수 내부에 return문을 작성할 필요가 없음

def address():
    string = '우편번호 12345\n'
    string += '서울시 영등포구 여의도동'
    return string

print(address())
''' 
실행결과)
우편번호 12345
서울시 영등포구 여의도동
'''

def address():
    string = '우편번호 12345\n'
    string += '서울시 영등포구 여의도동'
    print(string)

print(address())  # None : 반환값이 없어서 출력이 안됨

 


 

1)  다중 반환

  👾  하나의 반환값도 처리할 수 있고 여러 개의 반환값도 처리할 수 있음

def calculator(*args):
    return sum(args), sum(args) / len(args), max(args), min(args)

a, b, c, d = calculator(1, 2, 3, 4, 5)  # 4개의 반환값을 모두 저장하기 위해서 변수 4개 배치
print('합계', a)  # 합계 15
print('평균', b)  # 평균 3.0
print('최댓값', c)  # 최댓값 5
print('최솟값', d)  # 최솟값 1

# result는 4개의 반환값을 저장하는 튜플.
result = calculator(1, 2, 3, 4, 5)
print('합계', result[0])  # 합계 15
print('평균', result[1])  # 평균 3.0
print('최댓값', result[2])  # 최댓값 5
print('최솟값', result[3])  # 최솟값 1

 



2) 함수의 종료를 위한 return

  - 반환값이 있으면 return문을 사용해 반환하고, 반환값이 없으면 return문을 생략하면 됨

def charge(energy):
    if energy < 0:
        print('0보다 작은 에너지를 충전할 수 없습니다.')
        return  # charge() 함수의 종료를 의미.
    print('에너지가 충전되었습니다.')

charge(1)   # 에너지가 충전되었습니다.
charge(-1)  # 0보다 작은 에너지를 충전할 수 없습니다.

 



 

 

 

 

[ 내용 참고 : IT 학원 강의 자료 및 책 '혼자 공부하는 파이썬' ]

+ Recent posts