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)
'파이썬 > 데이터 다루기' 카테고리의 다른 글
[240911] #파이썬08-정규표현 (0) | 2024.09.11 |
---|---|
[240910] #파이썬07 함수- 출력(Output) (0) | 2024.09.10 |
[240910] 복습 (0) | 2024.09.10 |
[240909] 파이썬#5 제어문 실습 (1) | 2024.09.09 |
[240909] 파이썬#4, 제어문 - while 문 (0) | 2024.09.09 |