본문 바로가기
개발/Python

[파이썬, Python] 함수 만들기

by 꾀돌이 개발자 2022. 4. 15.
반응형

 

[ 파이썬 함수 만들기 ]

 

 

* 코드는 기본적으로 <입력값 # 출력값> 으로 구성되어 있습니다.

 

* 아래 [더보기] 클릭 후 [Ctrl + F] 단축키를 활용하여 찾고 계신 함수 위치로 바로 가실 수 있습니다.

더보기

함수 기본형 : def

함수 2개 이상 사용하기
함수 입력값(매개변수) 정의
함수 입력값(매개변수) 응용 : *args

함수 입력값(매개변수) 응용 : **kwargs

 

 

함수 기본형 : def

 

def 함수명(입력값):

    실행문

    return 출력값

 

  • 위 함수에 입력값(=매개변수)을 전달하면 실행문에서 지정된 작업을 실행한 뒤 원하는 출력값을 반환함
  • 위 함수는 함수명(입력값) 을 통해 호출할 수 있음
  • 입력값, 실행문, 출력값 각각이 필요하지 않을 경우 생략 가능함
  • 출력값이 정의되지 않은 경우 함수명 호출 시 None 값을 반환함
  • 단, 함수가 정의되는 범위를 알기 위해 실행문과 출력값 중 하나는 정의되어야 함
  • 출력값을 반환하기 위해 사용하는 return 은 반복문에서 break 와 같은 역할 또한 수행하므로 return 뒤의 내용은 실행되지 않음
def test(a, b):
	c = a + b
	return c

print(test(1, 2)) # 출력값 : 3

def test():
	c = 1 + 2
	return c

print(test()) # 출력값 : 3

def test(a, b):
	return a + b

print(test(1, 2)) # 출력값 : 3

def test(a, b):
	c = a + b
	print(c)

test(1, 2) # 출력값 : 3
print(test(1, 2)) # 출력값 : 3 / None

def test(a, b):
	c = a + b
	return c
	print(123)

print(test(1, 2)) # 출력값 : 3

 

 

함수 2개 이상 사용하기

  • 앞서 정의된 함수를 이용하여 새로운 함수를 정의할 수 있음
  • 함수 내에 새로운 함수를 정의할 수 있음
def test1(a, b):
	c = a + b
	return c

def test2(n, m):
	k = test1(n, m)
	return k

print(test2(1, 2)) # 출력값 : 3

def test2(n, m):
	def test1(a, b):
		c = a + b
		return c
	k = test1(n, m)
	return k

print(test2(1, 2)) # 출력값 : 3

 

 

함수 입력값(매개변수) 정의

 

def 함수명(매개변수1=값1, 매개변수2=값2, ...):

    실행문

    return 출력값

 

  • 위 함수와 같이 각 입력값의 초기값을 정의할 수 있으며, 입력값 없이 함수를 호출할 경우 초기값을 이용하여 함수가 실행됨
  • 함수명(매개변수2=3)과 같이 매개변수명(ex. 매개변수1, 매개변수2 등)을 직접 호출하여 정의가 가능하며 나머지 값은 초기값으로 정의된 상태로 함수가 실행됨
  • 만약 초기값이 지정된 매개변수와 그렇지 않은 매개변수가 함께 쓰인다면 초기값이 지정된 매개변수를 가장 끝에 위치시켜야 함
def test(a=1, b=2):
	c = a + b
	return c

print(test()) # 출력값 : 3
print(test(b=5)) # 출력값 : 6

def test(a, b, k=3):
	c = a + b + k
	return c

print(test(a=1, b=2)) # 출력값 : 6
print(test(1, 2)) # 출력값 : 6

def test(a, b=2, k):
	c = a + b + k
	return c

# 출력값 : SyntaxError: non-default argument follows default argument

 

 

함수 입력값(매개변수) 응용 : *args

  • *args : def 를 이용하여 함수를 정의할 때 매개변수를 *매개변수명 와 같은 형태로 입력하면 개수가 정해지지 않은 입력값을 매개변수에 tuple 형태로 저장할 수 있음
  • 일반적으로 *매개변수명*args 으로 사용됨
  • 일반 매개변수*args를 입력값으로 함께 사용할 수 있으며, 일반적으로 *args를 가장 뒤에 위치시키거나 매개변수를 위치에 맞게 지정하여 정의하는 것이 일반적임
def test(*args):
	print('args:', args)
	print('type:', type(args))

test(1, 2, 3, 4, 5) # 출력값 : args: (1, 2, 3, 4, 5) / type: <class 'tuple'>

def test(a, *args):
	print('a:', a)
	print('args:', args)
	print('type:', type(args))

test(0, 1, 2, 3, 4, 5) # 출력값 : a: 0 / args: (1, 2, 3, 4, 5) / type: <class 'tuple'>

def test(*args, a):
	print('a:', a)
	print('args:', args)
	print('type:', type(args))

test(0, 1, 2, 3, 4, 5) # 출력값 : TypeError: test() missing 1 required keyword-only argument: 'a'
test(a=0, 1, 2, 3, 4, 5) # SyntaxError: positional argument follows keyword argument
test(0, 1, 2, 3, 4, a=5) # 출력값 : a: 5 / args: (0, 1, 2, 3, 4) / type: <class 'tuple'>

def test(*args=(1,2,3,4,5)):
	print('args:', args)
	print('type:', type(args))

# 출력값 : SyntaxError: invalid syntax

 

 

함수 입력값(매개변수) 응용 : **kwargs

  • **kwargs : def 를 이용하여 함수를 정의할 때 매개변수를 **매개변수명 와 같은 형태로 입력하면 개수가 정해지지 않은 (키=값)을 매개변수에 dictionary 형태로 저장할 수 있음
  • 일반적으로 **매개변수명 **kwargs 로 사용됨
  • 일반 매개변수**kwargs를 입력값으로 함께 사용할 수 있으며, 일반적으로 **kwargs를 가장 뒤에 위치시키거나 매개변수를 위치에 맞게 지정하여 정의하는 것이 일반적임
def test(**kwargs):
	print('kwargs:', kwargs)
	print('type:', type(kwargs))

test(a=1, b=2, c=3) # 출력값 : kwargs: {'a': 1, 'b': 2, 'c': 3} / type: <class 'dict'>

def test(a, **kwargs):
	print('a:', a)
	print('kwargs:', kwargs)
	print('type:', type(kwargs))

test(0, b=2, c=3) # 출력값 : a: 0 / kwargs: {'b': 2, 'c': 3} / type: <class 'dict'>

def test(**kwargs, a):
	print('a:', a)
	print('kwargs:', kwargs)
	print('type:', type(kwargs))

# 출력값 : SyntaxError: invalid syntax

def test(**kwargs={'b': 2, 'c': 3}):
	print('kwargs:', kwargs)
	print('type:', type(kwargs))

# 출력값 : SyntaxError: invalid syntax

 

 

반응형