본문 바로가기
Python

파이썬 함수

by 승환파크 2023. 5. 8.

파이썬 함수의 구조

def 함수명(매개변수):

    <수행할 문장>

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

welcome()
# 결과값
# Hello!
# Nice to meet you

# add 함수 정의
def add(a, b):
	return a + b
    
a = 3
b = 4
c = add(a, b)
print(c)
# 결과값
# 7

함수 사용의 장점

코드의 용도를 구분할 수 있다.

코드의 재사용이 가능해서 불필요한 코드를 작성하지 않아도 된다.

코드를 직접 일일히 작성하지 않기 때문에 실수를 방지할 수 있다.(오타 등)

 

매개변수와 인수

매개변수 : 함수에 입력으로 전달된 값을 받는 변수

인수 : 함수를 호출할 때 전달받는 입력값

인수와 매개변수는 다른 개념이지만 함수가 호출된 뒤에는 구분히 모호해지므로 구분하지 않는 경우도 있다.

 

함수의 처리과정

입력값 → 함수 → 결과값

 

함수의 사용법

결과값을 받을 변수 = 함수(입력인수1, 입력인수2, ...)

def print_n_times(value, n):
    for i in range(n):
        print(value)
        
print_n_times("안녕하세요", 2)
# 결과값
# 안녕하세요
# 안녕하세요

# 매개변수 2개를 지정하고 인수를 하나만 넣는다면 에러 발생
print_n_times("안녕하세요")
# 결과값
# TypeError: print_n_times() missing 1 required positional argument: 'n'

# 지정한 매개변수 보다 인수를 많이 넣으면 에러 발생
print_n_times("안녕하세요", 10, 20)
# 결과값
# TypeError: print_n_times() takes 2 positional arguments but 3 were given

 

입력값이 없고 결과값이 있는 함수

def say():
    return "Hi"

a = say()
print(a)
# 결과값
# Hi

 

입력값이 있고 결과값이 없는 함수 사용법

def add(a, b):
    print(f"{a}, {b}의 합은 {a + b}입니다.")

add(3, 4)
# 결과값
# 3, 4의 합은 7입니다.

# 결과값 확인
a = add(3, 4)
print(a)
# 리턴값이 없으므로 print 를 찍어도 None 값이 나온다

 

입력값도 없고 결과값도 없는 함수 사용법

def say():
	print("Hi")

say()
# 결과값
# Hi

 

매개변수 지정해서 호출하기

def add(a, b):
    print(f"{a}, {b}의 합은 {a + b}입니다.")
    
add(b = 5, a = 3)
# 결과
# 3, 5의 합은 8입니다.
add(a = 3, b = 7)
# 결과
# 3, 7의 합은 10입니다.

 

함수의 결과값

def add_and_mul(a, b):
    return a + b, a * b

result = add_and_mul(3, 4)
# 함수의 결과값은 2개가 아니라 하나의 튜플로 반환되었다
print(result)
# 결과값
# (7, 12)

# 2개의 결과값으로 받고 싶다면
resutl1, result2 = add_and_mul(3, 4)
print(resutl1, result2)
# 결과값
# 7 12

def add_and_mul(a, b):
    return a + b
    return a * b

# 함수는 return을 만나는 순간 함수 실행이 종료된다
result = add_and_mul(2, 3)
print(result)
# 결과값
# 5

 

return

함수를 종료시키고 싶을 때 사용할 수 있다.

def sayNick(nick):
    if nick == "바보":
        return
    print(f"나의 별명은 {nick} 입니다.")

sayNick("야호")
# 결과값
# 나의 별명은 야호 입니다.

sayNick("바보")
# 결과값
# None(결과값 없음)

 

디폴트 매개변수

매개변수로 전달되는 인수가 없는 경우에 기본적으로 사용하는 기본값을 디폴트 매개변수라고 한다.

def sayMySelf(name, age, man = True):
    print(f"나의 이름은 {name} 입니다")
    print(f"나이는 {age}살 입니다.")
    if man:
        print("남자입니다")
    else:
        print("여자입니다")

sayMySelf("파이썬", 27)
# 결과값
# 나의 이름은 파이썬 입니다
# 나이는 27살 입니다.
# 남자입니다

sayMySelf("자바", 25, False)
# 결과값
# 나의 이름은 자바 입니다
# 나이는 25살 입니다.
# 여자입니다

def print_n_times(value, n = 2):
    for i in range(n):
        print(value)

print_n_times("안녕하세요")
# 결과값
# 안녕하세요
# 안녕하세요

디폴트 매개변수의 위치

파이썬은 인수를 어디에 대입해야할지 알 수 없다.

따라서 디폴트 매개변수는 항상 맨 뒤에 들어가야한다.

def sayMySelf(name, man = True, age):
    print(f"나의 이름은 {name} 입니다")
    print(f"나이는 {age}살 입니다")
    if man:
        print("남자입니다")
    else:
        print("여자입니다")

# 결과값
# SyntaxError: non-default argument follows default argument

 

지역변수와 전역변수

지역변수

  • 함수 내부에서 선언한 변수는 함수 내부에서만 사용할 수 있는 변수가 된다.
  • 함수 외부에서는 지역변수에 접근할 수 없다.

전역변수

  • 함수 외부에서 선언한 변수는 함수 내부에서도 사용이 가능하다.
var2 = 15

def vartest():
    var = 10
    print(var)

def var2test():
    print(var2)

vartest()
# 결과값
# 10

var2test()
# 결과값
# 15

print(var)
# 결과값
# NameError: name 'var' is not defined

print(var2)
# 결과값
# 15

전역변수를 함수 내부에서 사용하는 2가지 이유

  1. 단순한 참조를 위해서 사용한다.
  2. 전역변수의 값을 변경하기 위해서 사용한다.
a = 10

def f():
	a = 10
    print(a)

f()
# 결과값
# 10

print(a)
# 결과값
# 0

def f2():
	global a # 전역변수 a를 사용하겠다는 뜻
    a = 10
    print(a)

f2()
# 결과값
# 10

print(a)
# 결과값
# 10

 

가변 매개변수

여러개의 입력값을 받는 함수이다.

함수로 전달해야하는 인수의 갯수가 정해지지 않은 매개변수를 가변 매개변수라고 한다.

함수를 정의시 매개변수 앞에 * 를 붙이면 가변 매개변수가 된다.

전달되는 인수는 하나의 튜플 형태로 전달된다.

 

가변 매개변수의 제약조건

  • 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.
  • 가변 매개변수는 하나만 사용할 수 있다.
def show(*args):
    print(args)

show("Python")
# 결과값
# ('Python',)

show("Happy", "BirthDay")
# 결과값
# ('Happy', 'BirthDay')

 

키워드 매개변수

def printKwargs(**kwargs):
	print(kwargs)

printKwargs(a = 1)
# 결과값
# {'a' : 1}

printKwargs(name = "foo", age = 3)
# 결과값
# {'name' : 'foo', 'age' : 3}

 

 

파이썬은 함수(메서드)는 스네이크표기법을 주로 사용하고 클래스를 작성할 때에는 카멜 표기법 을 주로 사용한다.

'Python' 카테고리의 다른 글

파이썬 내장함수  (1) 2023.05.08
파이썬 데이터 입출력  (0) 2023.05.08
파이썬 반복문  (1) 2023.05.08
파이썬 조건문  (0) 2023.05.08
파이썬 세트  (0) 2023.05.08