본문 바로가기
파이썬/데이터 다루기

[240910] # 파이썬06 - 함수 (입력_Input)

by 황오독 2024. 9. 10.

1. 함수(Function)

- 함수는 입력받아 처리한 후 결과를 반환하는 것이다.

- 쌀(입력)을 밥솥(함수)에 넣으면 밥(출력)이 되는 형태와 같다.

- 프로그래밍에서 함수란 반복해 사용할 코드를 미리 정의해 두고 필요할 때 사용하는 모듈이다.

- 함수는 def 문으로 정의한다.

- 크게 입력(Input) / 처리 / 출력(Input) 세가지로 구성이 된다.

 

■ 입력 (Input)

1) 함수 만들기: 처리하는 함수

# 함수 만들기: 처리하는 함수
def hello():
    print('안녕하세요? 반갑습니다!')
# 함수 사용하기
hello()

# 출력값
안녕하세요? 반갑습니다!
a = hello()
print(a) # none으로 결과가 출력됨. 
		 # return 문이 없어서, 받을 수 없음!
print(hello()) # 마찬가지로 none으로 결과가 출력이 됨. 반환을 하지 않기 때문!

 

2) 함수 만들기: 반환하는 함수

# 함수 만들기: 반환하는 함수
def hello():
    return '안녕하세요? 반갑습니다!' # return 함수가 아니라 retrun 문임.
                                   # return 함수라면 return()
                                   # return ('안녕하세요? 반갑습니다!')의 소괄호는 튜플의 소괄호임.

 

 ① 매개변수

   - 위 함수는 입력없이 처리되는 함수이다.

   - 입력을 받아 처리하는, 즉 매개변수를 갖는 함수를 만든다.

   - 위치인수 : Positional Argument

# 함수 만들기
def hello(name):
	print(f'{name}님 안녕하세요? 반갑습니다!')

# 함수 사용
hello('홍길동')
hello('강사')

# 결과
홍길동님 안녕하세요? 반갑습니다!
강사님 안녕하세요? 반갑습니다!

# 참고
원래라면 hello(name = '강사')로 작성해야 함.
현재는 매개변수가 하나밖에 없어서 따로 지정하지 않음. (매개변수 순서에 대해서는 뒤에서 언급)

 

② 매개변수 기본값

   - 위 함수는 매개변수가 없으면 오류가 발생한다.

   - 오류가 발생하지 않게 도와주는 것이 개발자의 'attitude'이므로 '매개변수 = 값' 형태로 기본값을 지정해준다.

   - 이름을 전달하지 않으면 '여러분'이 기본값으로 사용되게 수정한다.

   - 기본인수 (Default Argument)

# 함수 만들기
def hello(name = '여러분'):
	print(f'{name}님 안녕하세요? 반갑습니다!')
    
    
# 함수 사용
hello('홍길동')
hello()

# 결과

홍길동님 안녕하세요? 반갑습니다.
여러분님 안녕하세요? 반갑습니다.

  - 위 코드에서 기본값이 여러분인데, 여러분'님'으로 끝나는것이 문법상 자연스럽지가 않다.

  - if 문을 이용해서 기본값이 사용된 경우와 매개변수가 사용된 경우를 구분하여 코드를 작성한다.

 

def hello(name = '여러분'):
	if name == '여러분':
    	print(f'{name} 안녕하세요? 반갑습니다!')
    else:
    	print(f'{name}님 안녕하세요? 반갑습니다!')
        
hello('홍길동')
hello()

# 결과
홍길동님 안녕하세요? 반갑습니다!
여러분 안녕하세요? 반갑습니다!

 

③ 매개변수 순서

   - 매개변수 순서에 맞게 값을 넣으면 매개변수 이름 생략 가능하다. (=위치 인수)

   - '매개변수=값' 형태로 매개변수 이름을 지정하면 전달되는 순서를 바꿀 수 있다.

   - '매개변수=값' 형태로 매개변수에 전달되는 인수를 키워드 인수(Keyword Argument)라고 한다.

def hello (name, loud=1):
	if loud == 1:
    	print(f'우~~와~~ {name}님 안녕하세요? 반갑습니다!!!')
    else:
    	print(f'{name}님 안녕하세요? 반가워요.')
        
        
# 함수 사용
hello(name='홍길동', loud=1) # 매개변수로 이름 = 값 으로 지정
hello(loud=0, name='홍길동') # 매개변수 이름으로 지정하면 순서 변경 가능
hello('홍길동',0) # 매개변수 순서에 맞게 값을 넣음
hello('홍길동') # 함수 생성 시 loud=1로 선언했으므로, 안쓰면 기본값인 1이 입력됨

# 결과
우~~와~~ 홍길동님 안녕하세요? 반갑습니다!!!
홍길동님 안녕하세요? 반가워요.
홍길동님 안녕하세요? 반가워요.
우~~와~~ 홍길동님 안녕하세요? 반갑습니다!!!

 

 

④ 가변 인수

   - 임의 개수의 값이 매개변수에 전달되는 인수를 가변 인수(Arbitrary Argument)

   - 가변 인수는 대부분 함수 안에서 반복문을 사용해 처리한다.

   - *은 낱개씩 처리하라는 의

# 함수 만들기
def hello(*args):
    print(args)
    for who in args:
        print(f'{who}님 안녕하세요? 반갑습니다!')

# 함수 사용
hello('홍길동', '일지매', '강우동')
# * 의 의미 확인
a = [1, 2, 3, 4, 5]
print(*a)
print(a[0], a[1], a[2], a[3], a[4])

whos = ['홍길동', '일지매', '강우동']
print(*whos)
print(whos[0], whos[1], whos[2])

# 결과 출력
1 2 3 4 5
1 2 3 4 5
홍길동 일지매 강우동
홍길동 일지매 강우동

 

⑤ 가변 인수와 위치 인수

   - 위치 인수를 가변 인수 앞에 둘 수 있다.

# 함수 만들기
def hello(title, *args):
    for who in args:
        print(f'{who}{title} 안녕하세요? 반갑습니다!')

# 함수 사용
hello('선생님', '홍길동', '일지매', '강우동')
# 선생님이 title, 뒤는 모두 *args 하나씩 나옴

# 결과 출력
홍길동선생님 안녕하세요? 반갑습니다!
일지매선생님 안녕하세요? 반갑습니다!
강우동선생님 안녕하세요? 반갑습니다!

 

- 하지만 아래의 경우에는 키워드 인수로 사용할 수 없다.

# 함수 만들기
def hello(title, *args):
    for who in args:
        print(f'{who}{title} 안녕하세요? 반갑습니다!')

# 함수 사용(오류)
hello(title='선생님', '홍길동', '일지매', '강우동')


# 함수 만들기
def hello(*args, title):
    for who in args:
        print(f'{who}{title} 안녕하세요? 반갑습니다!')

# 함수 사용(오류)
hello('홍길동', '일지매', '강우동', '선생님')

# 함수 만들기 (뒤에 쓰면 키워드 인수, 앞에 쓰면 위치인수로 사용해야 함.)
def hello(*args, title):
    for who in args:
        print(f'{who}{title} 안녕하세요? 반갑습니다!')

# 함수 사용
hello('홍길동', '일지매', '강우동', title='선생님')

==> 뒤에 쓰면 키워드 인수, 앞에 쓰면 위치인수로 사용해야 함!!

 

[[연습문제]]

[문1] 숫자를 여러 개 받아(*매개변수) 각각의 숫자를 제곱한 후 모두 더한 값을 출력하는 함수 hap를 만드세요.
# 함수 만들기
def hap(*nums):
	tot = 0
    for x in nums:
    	tot += x ** 2
    return tot

# 함수 사용
result = hap(1, 4, 3, 5)
print(result)

# 결과값
51

===================================================

# 함수 만들기
def hap(*nums):
    tot = 0
    for x in nums:
        tot += x ** 2
    print(tot)

# 함수 사용
hap(1, 4, 3, 5)

# 결과값
51

 

위 코드 반복문 확장 사용

# 반복문 확장 사용
def hap(*num):
    n = [x**2 for x in num]
    print(sum(n))  # print(sum([x**2 for x in num]))
    
hap(1, 4, 3, 5)

# 반복문 확장 사용
def hap(*num):
    n = [x**2 for x in num]
    return sum(n)  # print(sum([x**2 for x in num]))
    
result = hap(1, 4, 3, 5)
print(result)​