EverGiver

04-1 함수 본문

Python/문법

04-1 함수

친절한개발초보자 2021. 8. 4. 22:04
728x90
파이썬 함수의 구조

 

def 함수 이름(매개변수):
	수행할 문장1
	수행할 문장2
	...
def add(a, b):
	return a + b

>>> a = 3
>>> b = 4
>>> c = add(a, b) // add(3, 4)의 반환 겂을 c에 대입
>>> print(c)
7

 

매개변수와 인수

 

  • 매개변수
    : 함수에 입력으로 전달된 값을 받는 변수
  • 인수
    : 함수를 호출할 때 전달하는 입력
def add(a, b): // a, b는 매개변수
	return a + b
    
print(add(3, 4)) // 3, 4는 인수

 

입력값과 결괏값에 따른 함수의 형태

 

  • 일반적인 함수
    def 함수 이름(매개변수):
    	수행할 문장
    	...
    	return 결괏값
    >>> def add(a, b):
    	result = a + b
    	return result
        
    >>> a = add(3, 4)
    >>> print(a)
    7
    결과값을 받을 변수 = 함수이름(입력인수 1, 입력인수 2, ...)​

 

  • 입력값이 없는 함수
    >>> def say():
    	return 'Hi'
    
    >>> a = say()
    >>> print()
    Hi​
    결과값을 받을 변수 = 함수이름( )​
  • >>> def add(a, b):
    	print("%d %d의 합은 %d입니다." % (a, b, a+b))
    
    >>> a = add(3, 4)
    3,4의 합은 7입니다.
    
    >>> print(a)
    None결괏값이 없는 함수
    함수이름(입력인수1, 입력인수2, ...)​​
    → 결괏값은 오직 return 명령어로만 돌려받을 수 있다

  • 입력값도 결괏값도 없는 함수
    >>> def say():
    	print('Hi')
    
    >>> say()
    Hi
    함수 이름()​
매개변수 지정하여 호출하기

 

>>> def add(a, b):
	return a+b

>>> result = add(a=3, b=7) // a에 3, b에 7을 전달
>>> print(result)
10

// 매개변수를 지정하면 순서에 상관없이 사용할 수 있다는 장점이 있다.
>>> result = add(b=5, a=3) // b에 5, a에 3을 전달
>>> print(result)
8

 

입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

 

def 함수이름(*매개변수):
	수행할 문장
	...

 

  • 여러 개의 입력값을 받는 함수 만들기
    >>> def add_many(*args):
    	result = 0
    	for i in args:
    		result = result + i
    	return result
        
    >>> result = add_many(1,2,3)
    >>> print(result)
    6
    >>> result = add_many(1,2,3,4,5,6,7,8,9,10)
    >>> print(result)
    55
    → *args처럼 매개변수 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.

 

  • 키워드 파라미터
    : 매개변수 앞에 별 두 개(**)를 붙인다.
    >>> def print_kwargs(**wargs)
    	print(wargs)
    
    >>> print_kwargs(a=1)
    {'a': 1}
    >>> print_kwargs(name='foo', age=3)
    {'age': 3, 'name': 'foo'}​
    → 매개변수 이름 앞에 **을 붙으면 매개변수 kwargs는 딕셔너리가 되고 모든 key=values 형태의 결괏값이 그 딕셔너리에 저장된다.

함수의 결괏값은 언제나 하나이다

 

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

// 튜플 값 하나인 (a+b, a*b)로 돌려준다.
>>> result = add_and_mul(3,4)
result = (7,12)

// 하나의 튜플 값을 2개의 결괏값처럼 받고 싶은 경우
>>> result1, result2 = add_and_mul(3, 4)
result 1, result2 = (7, 12)
def add_and_mul(a,b):
	return a+b
	return a*b
>>> result = add_and_mul(2,3)
>>> print(result) // 두 번째 return문인 return a*b는 실행되지 않는다.
5

 

  • return의 또 다른 쓰임새
    >>> def say_nick(nick):
    	if nick == "바보":
    		return
    	print("나의 별명은 %s입니다." % nick)
    
    >>> say_nick('야호')
    나의 별명은 야호입니다.
    >>> say_nick('바보')
    >>> 
    // 이처럼 return으로 함수를 빠져나가는 방법을 이용할 수 있다.
매개변수에 초깃값 미리 설정하기

 

def say_myself(name, old, man=True):
	print("나의 이름은 %s입니다." % name)
	print("나이는 %d살입니다." % old)
	if man:
		print("남자입니다.")
	else:
		print("여자입니다.")
        
>>> say_myself("박응용", 27)
>>> say_myself("박응용", 27, True)
// 동일한 결과 출력
나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.

>>> say_myself("박응선", 27, False)
나의 이름은 박응선입니다.
나이는 27살입니다.
여자입니다.
def say_myself(name, man=True, old):
	print("나의 이름은 %s입니다." % name)
	print("나이는 %d살입니다." % old)
	if man:
		print("남자입니다.")
	else:
		print("여자입니다.")
        
>>> say_myself("박응용", 27)
// 오류 발생

→ 초기화시키고 싶은 매개변수를 항상 뒤쪽에 놓자.

 

함수 안에서 선언한 변수의 효력 범위

 

a = 1 // 함수 밖의 변수 a
def vartest(a): // vartest 함수 선언
	a = a + 1 // vartest 함수 선언

varset(a) // // vartest 함수의 입력값으로 a를 줌
print(a) // a 값 출력

 

  • 함수 안에서 함수 밖의 변수를 변경하는 방법
    1. return 사용하기
    a = 1
    def vartest(a):
    	a = a + 1
    	return a
        
    a = vartest(a) // vartest(a)의 결괏값을 함수 밖의 변수 a에 대입
    print(a)
    2. global 명령어 사용하기(추천 x)
    a = 1 
    def vartest(): 
    	global a 
        a = a + 1 
        
    vartest() 
    print(a)​
lambda

 

보통 함수를 한 줄로 간결하게 만들 때 사용한다.

lambda 매개변수 1, 매개변수 2, ...: 매개변수를 사용한 표현식
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7

→ lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.

728x90

'Python > 문법' 카테고리의 다른 글

04-3 파일 읽고 쓰기  (0) 2021.08.05
04-2 사용자 입력과 출력  (0) 2021.08.04
03-3 for문  (0) 2021.08.03
03-2 while문  (0) 2021.08.03
03-1 if문  (0) 2021.08.03
Comments