rueki

day4-1. 함수 (Function) 본문

python

day4-1. 함수 (Function)

륵기 2020. 1. 6. 21:40
728x90
반응형

이번 시간에는 함수에 대해서 알아보는 시간을 가지겠다.

개인적으로 함수을 잘 만들고 못 만들고가, 코딩을 잘하고 못하고라고 개인적으로 생각한다.

물론 알고리즘 잘 짜면 그것만큼 좋은 것은 없을 것이다.


함수는 기본적으로 명령문의 조합이라고 생각하면 좋다. 코딩을 단순화하기 위해 함수를 작성하는데,

함수의 종류로는 내장함수, 사용자 정의함수가 있다.

 

먼저 배워볼 함수는 사용자 정의함수이다.

함수 선언 구조로는 아래와 같다.

 

def 함수 이름(인자 1, 인자2...):
    명령문
    return 문

 

인자의 종류로는 단순인자, 초기값 지정인자, 가변 인자, 딕셔너리 가변인자 등이 있으며,

함수를 호출할 때는 함수 이름(값1, 값2...) 으로 호출하면 된다.

 

 

함수를 다양한 방법으로 정의가 할 수 있는데, 이에 대해서 알아보자

 

1. 인자 X, return 문 X

 

def helloworld():
    for i in range(0,3):
        print('hello world')

'hello world'를 세번 출력하는 함수를 만들어 보았다. helloworld() 로 결과값을 받아볼 수가 있으며,

위와 같은 함수는 인자와 반환값이 없는 구조이다.

 


2. 인자 O, return 문 X

def 함수명(인자1, 인자2..):
    인자가 있는 명령문

 

위의 구조를 가지며, 호출 시 함수명(값1, 값2 ...) 의 구조를 가진다.

def printmessage(message):
    print(message*3, end=' ')

message를 인자로 넘겨서 출력하는 구조이다.

 


3. 인자 O, return 문 O

def 함수명(인자1, 인자2...):
    명령문
    return 결과값. 수직

 

위의 구조를 가지며 이해하기 쉽게 코드를 먼저 살펴보자.

def addnum(a, b):
    print(a+b)
    return a + b

두 수의 합을 구하는 함수로서, a 와 b를 인자로 받아서 반환값을 가진다.


기본적인 함수 구조에 대해서 알아보았으니 2가지 퀴즈를 풀어보자.

 

Quiz1. 2개의 수 x,y 를 인자로 전달하여 누적합 구하기

많이 보는 예제이다. x에서 y까지의 합을 구하는 문제이며, for문을 이용하면 쉽게 풀 수가 있다.

def hap(x, y):
	sum = 0
    for i in range(x,y+1):
    	sum += i
    print(f'x에서 y까지의 합 : {sum})
    return sum

Quiz2. n개의 입력을 받아서 리스트에 저장하시오

이 문제는 리스트에 반복문을 통해서 append를 하면 되는 문제이다.

def inputValue(n):
	result = []
    for i in range(0,n):
    	value = input('값을 입력하세요')
    	result.append(value)
    print(result)

위의 함수들은 단순 인자를 받은 함수의 구조에 대해서 알아보았다면, 이번에는 중요한 개념인

가변인자 함수에 대해서 알아보자.

가변함수의 경우는 인자의 개수가 정해지지 않은 경우이며, 쉽게 설명하자면 인자를 할당하지 않았어도,

넣어도 된다.

 

def 함수명(*args):
    args에 관련된 명령문...
    return 값/변수/수식/명령문

 

*args 를 꼭 넣어주어야 함으로 기억하고 있자.

 

def studentName(*args):
    print(f'수강학생 목록:  {args}, 데이터형은? : {type(args)}' )

위와 같은 함수가 있다고 가정하자. studentName의 인자는 가변인자임으로, 

studentName('홍길동')
studentName('홍길동, 이순신','이몽룡')


#수강학생 목록:  ('홍길동',), 데이터형은? : <class 'tuple'>
#수강학생 목록:  ('홍길동, 이순신', '이몽룡'), 데이터형은? : <class 'tuple'>

위의 함수를 호출했을 때 결과값이 아래와 같게 나온다. 즉 인자를 계속 넣어도 무관하다는 것을 알 수가 있다.

또한 인자와 가변인자 둘 다 할당할 수 있는 구조의 함수도 존재한다.

 

def 함수명(인자, *args):
    인자와 args를 이용한 명령문...
    return 값/ 변수/수식/명령문

 


이번에는 딕셔너리 가변인자 **kwargs 에 대해서 알아보자

 

def 함수명(**kwargs):

    명령문

 

위의 구조를 가지며 인자가 딕셔너리 형태인 것을 꼭 기억하자.

def makePerson(**kwargs):
    kwargs['nationality'] = 'USA'
    #return print(kwargs)
    print('-'*20)
    for key in kwargs:
        print(f'{key} = {kwargs[key]}')



makePerson(age = 33, name='Jackson')
# age = 33
# name = Jackson
# nationality = USA


{'nationality' : 'USA'} 의 딕셔너리 구조에 age=33, name='Jackson' 의 값을 넣어서

kwargs라는 딕셔너리 가변인자에 age와 name이라는 key 값을 넣고 그에 상응하는 33과 Jackson이라는 Value값을 할당해서 출력을 하였다.

 

이번시간까지 함수의 기본적 구조부터, 가변인자, 딕셔너리 가변인자에 대해서 알아보았고,

다음 시간에는 lambda 함수에 대해서 알아보는 시간을 갖도록 하겠다.

728x90
반응형

'python' 카테고리의 다른 글

day5-1. 기타 내장 함수  (0) 2020.01.07
day4-2. lambda 함수, 내장함수  (0) 2020.01.06
day3-2. 반복문 (for , while)  (0) 2020.01.05
day3-1. if ~ else 문  (0) 2020.01.05
day2. 집합 자료형  (0) 2020.01.01
Comments