■ 함수
함수는 어떤 입력값을 가지고 어떤 일을 수행한 후 그 결과물을 출력한다. y = 2x + 3 이라는 함수를 생각해보면, 입력값 x에 따라 출력값 y 이 변하는 함수다.
■ 함수를 사용하는 이유
프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하는 경우가 종종 있다. 이때 함수가 필요하다. 반복되는 부분이 있을 경우, '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어 '어떤 입력값을 주었을 때 어떤 결괏값을 리턴해 준다'라는 식의 함수로 작성하는 것이다.
함수를 사용하는 또 다른 이유는 자신이 작성한 프로그램을 기능 단위의 함수로 분리해 놓으면 프로그램 흐름을 일목요연하게 볼 수 있기 때문이다. 프로그램에서 입력한 값이 여러 함수를 거치면서 원하는 결괏값을 내는 것을 볼 수 있다. 이렇게 되면 프로그램의 흐름을 잘 파악할 수 있고 오류가 어디에서 나는지도 쉽게 알아차릴 수 있다.
프로그래밍에의 함수에서는 입력 또는 출력이 없거나 입출력 전부 없을 수 있는 특징이 있다.
■ 파이썬 함수 구조
(1) 파이썬 함수 일반 구조
>>> def sum(a, b):
result = a + b
return result
>>> print(sum(1,2))
(2) 입력값이 없는 함수
>>> def say():
return 'hi'
>>> print(say())
hi
(3) 리턴값이 없는 함수
>>> def sum(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b))
>>> print(sum(1, 2))
1, 2의 합은 3입니다.
None
(4) 입력값, 리턴값이 없는 함수
>>> def say():
print('hi')
>>> print(say())
hi
None
(5) 매개변수를 지정해 호출
>>> def sub(a, b):
return a - b
result = sub(a=6, b=3)
>>> print(result)
3
■ 입력값이 여러 개인 함수 구조
(1) 여러개의 입력값 (*args는 key, value를 받는 형식을 제외한 모든 형식을 개수 상관없이 인자로 받는다)
>>> def sum_many(*args):
sum = 0
for i in args:
sum = sum + i
return sum
>>> print(sum_many(1,2,3))
6
(2) *args를 이용해 여러개의 입력값과 여러개의 매개변수
- 매개변수 choice에 "add"을 입력받았을 때
>>> def add_mul(choice, *args):
if choice == "add": # 매개변수 choice에 "add"을 입력받았을 때
result = 0
for i in args:
result = result + i
elif choice == "mul": # 매개변수 choice에 "mul"을 입력받았을 때
result = 1
for i in args:
result = result * i
return result
>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
- 매개변수 choice에 "mul"을 입력받았을 때
>>> def add_mul(choice, *args):
if choice == "add": # 매개변수 choice에 "add"을 입력받았을 때
result = 0
for i in args:
result = result + i
elif choice == "mul": # 매개변수 choice에 "mul"을 입력받았을 때
result = 1
for i in args:
result = result * i
return result
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120
(3) 여러개의 입력값 (*kwarg는 key, value를 받는 형식의 인자를 개수 상관없이 받는다)
>>> def print_kwargs(**kwargs):
print(kwargs)
>>> print_kwargs(name='park', age=26)
{'name': 'park', 'age': 26}
■ 함수의 리턴 값은 하나
(1) 여러 개의 값을 튜플 형태로 나타내고 결국 리턴 값은 하나이다.
>>> def sum_and_mul(a,b):
return a+b, a*b
>>> print(sum_and_mul(1,2))
(3, 2)
(2) 여러 개의 값을 튜플 형태로 나타내고 인덱싱으로 원하는 부분만 출력
>>> def sum_and_mul(a,b):
return a+b, a*b
>>> print(sum_and_mul(1,2)[0])
3
■ 매개변수 초깃값 미리 설정하기
(1) 원래 일반적인 형태(매개변수 순서를 맞추어야함)
>>> def say_myself(name, age, man):
print("my name is %s." % name)
print("I am %d years old. % age)
if man:
print("I'm a man.")
else:
print("I'm a women.")
>>> say_myself("park", 26, "man")
my name is park.
I am 26 years old.
I'm a man.
(2) 매개변수 "man"을 True로 미리 설정 (True로 지정하는 매개변수는 맨 뒤에 있어야함, 순서 중요)
>>> def say_myself(name, age, man=True):
print("my name is %s." % name)
print("I am %d years old. % age)
if man:
print("I'm a man.")
else:
print("I'm a women.")
>>> say_myself("park", 26)
my name is park.
I am 26 years old.
I'm a man.
(3) 매개변수 순서 안 맞출 수 있는 방법
>>> def say_myself(name, age, man=True):
print("my name is %s." % name)
print("I am %d years old. % age)
if man:
print("I'm a man.")
else:
print("I'm a women.")
>>> say_myself(age=26, name="park")
my name is park.
I am 26 years old.
I'm a man.
■ 함수 안에 선언한 변수의 효력 범위
ex.
>>> a = 1
>>> def vartest(a)
a = a + 1
>>> vartest(a)
>>> print(a)
1
위 코드를 보면 2가 출력될 것 같지만, 프로그램을 실행해 보면 리턴 값은 1이 나온다. 그 이유는 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 '함수만의 변수'이기 때문이다. 즉, def vartest(a) 에서 입력값을 전달받은 매개변수 a는 함수 안에서만 사용하는 변수일 뿐, 함수 밖의 변수는 a와는 전혀 상관없다.
■ 함수 안에서 함수 밖의 변수를 변경하는 방법
(1) return 사용
>>> a = 1
>>> def vartest(a):
a = a + 1
return a
>>> a = vartest(a)
>>> print(a)
2
(2) global 명령어 사용
>>> a = 1
>>> def vartest():
global a
a = a + 1
>>> vartest()
>>> print(a)
2
■ Immutable vs Mutable
- Immutable : 정수, 실수, 문자열, 튜플 (변하지 않음)
- Mutable : 리스트, 딕셔너리, 집합 (변할 수 있음)
(1) Immutable
>>> a = 1
>>> def vartest(a):
a = a + 1
>>> vartest(a)
>>> print(a)
1
(2) Mutable
>>> b = [1,2,3]
>>> def vartest(b):
b = b.append(4)
>>> vartest2(b)
>>> print(b)
[1, 2, 3, 4]
■ lambda 예약어
lambda는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 한다. 보통 함수를 한 줄로 간결하게 만들 때 사용한다. 우리말로 '람다'라고 읽고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에서 주로 쓰인다.
- def를 사용해서 표현
>>> def add(a,b):
return a+b
>>> print(add(1,2))
3
- lambda 이용해서 표현
>>> add = lambda a,b: a+b
>>> print(add(1,2))
3
- 리스트 안에 함수 넣기
>>> mylist = [lambda a, b: a+b, lambda a, b: a*b]
>>> print(mylist[0](1,2))
3
'Python > 파이썬 기초' 카테고리의 다른 글
[5-1] 클래스 (0) | 2024.06.30 |
---|---|
[4-2] 사용자 입출력 (0) | 2024.06.30 |
[1-1] 변수 (0) | 2024.06.29 |
[3-3] for문 (0) | 2024.06.29 |
[3-2] while문 (0) | 2024.06.29 |