1. 함수
함수가 뭘까? 과일을 입력받아 주스를 출력하는 '믹서'와 같다.
>>> def add(a, b):
... return a+b
add는 함수의 이름일 뿐이다.
결과값을 return으로 얻어내는 것이다.
매개변수와 인수
매개변수 = parameter
인수 = arguments
def add(a, b): # a, b는 매개변수
return a+b
print(add(3, 4)) # 3, 4는 인수
입력값의 비슷한 말 : 함수의 인수, 파라미터, 매개변수
리턴값의 비슷한 말 : 결괏값, 출력값, 반환값, 돌려 주는 값
함수는 입력값과 리턴값의 존재 유무에 따라 4가지 유형으로 나뉜다.
1. 일반적인 함수
def 함수_이름(매개변수):
수행할_문장
...
return 리턴값
2. 입력값이 없는 함수
>>> def say():
... return 'Hi'
3. 리턴값이 없는 함수
>>> def add(a, b):
... print("%d, %d의 합은 %d입니다." % (a, b, a+b))
문장을 출력하기는 했지만 수행할 문장을 말하는 것일 뿐 리턴값은 없는 것이다.
a = add(3, 4)
print(a)
를 하면 None 이 출력된다. 리턴값이 없다는 것이다.
4. 입력값도, 리턴값도 없는 함수
>>> def say():
... print('Hi')
여러 개의 입력값을 받는 함수
add_many(*args)
args는 인수를 뜻하는 arguments의 약자이다. 다른 것으로 바꾸어도 된다.
>>> def add_many(*args):
... result = 0
... for i in args:
... result = result + i # *args에 입력받은 모든 값을 더한다.
... return result
함수의 매개변수로 여러 개의 입력을 처리할 수도 있다.
>>> 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
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120
키워드 매개변수, kwargs
이번에는 매개변수 이름 앞에 별 2개 (**)를 붙인다.
프린트를 하면 딕셔너리 형태로 받게 된다.
여러 개의 결과값을 받아서 나눠서 활용할 때 쓰일 수 있다.
>>> def print_kwargs(**kwargs):
... print(kwargs)
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}
함수의 리턴값은 언제나 하나
>>> def add_and_mul(a,b):
... return a+b, a*b
result = (7, 12)
2개처럼 보이지만 튜플 값이다.
파이썬에서 리턴값은 언제나 하나이다.
함수는 return문을 만나는 순간 결괏값을 돌려준 다음 함수를 빠져나간다.
이것을 활용해서 return을 이용해 함수를 빠져나가는 방법도 존재한다!
>>> def say_nick(nick):
... if nick == "바보":
... return
... print("나의 별명은 %s 입니다." % nick)
>>> say_nick('야호')
나의 별명은 야호입니다.
>>> say_nick('바보')
>>>
매개변수에 초깃값 미리 설정하기
def say_myself(name, age, man=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % age)
if man:
print("남자입니다.")
else:
print("여자입니다.")
man = True 라고 초깃값이 정해져 있다.
say_myself("박응용", 27)
이렇게만 적어도 True라고 출력된다.
초기화하고 싶은 매개변수는 항상 뒤쪽에 놓아야 한다. 매개변수는 항상 순서에 맞게 들어간다.
함수 안에서 선언한 변수의 효력 범위
이 부분 상당히 중요하고, 어렵다
매개변수 a는 함수 안에서만 사용하는 변수일 뿐, 함수 밖의 변수 a와는 전혀 상관없다.
a = 1
def vartest(a):
a = a +1
vartest(a)
print(a)
1
함수에서는 2가 되었지만 아무 것도 출력되지 못했고, a = 1의 값을 가져온 것이다.
def vartest(a):
a = a + 1
vartest(3)
print(a)
오류
함수 안에서 함수 밖의 변수를 변경하는 방법
1. return 사용하기
a = 1
def vartest(a):
a = a +1
return a
a = vartest(a)
print(a)
2a = 1 def vartest(a): b = a +1 return b c = vartest(a) print(c)
a=1이라는 값을 매개변수 a에 넣었다. 함수 안에서 지역변수가 2가 된 것을 return이 뱉었다. 이것을 함수 밖의 변수인 a가 담았고 출력한 것이다.
2. global 명령어 사용하기
vertest 함수 안의 global a 문장은 함수 밖의 변수 a변수를 직접 사용하겠다는 뜻이다.
하지만, 외부 변수에 종속적인 함수는 좋은 함수가 아니다.
되도록이면 return을 사용하자!
여기서! 진짜 알짜배기 나간다
- immutable(변형불가능) : 정수, 실수, 문자열, 튜플
- mmutable(변형가능) : 리스트, 딕셔너리, 집합
b = [1,2,3]
def vertest2(b):
b = b.append(4)
vertest2(b)
print(b)
[1, 2, 3, 4]
비록 함수가 끝나면 return이 없기 때문에 지역변수 b는 없다. None이다.
그런데, b.append(4) 라는 행위를 통해서 b라는 리스트를 변화를 준 것이다.
단, append라는 행위는 변화를 만드는 것일 뿐이지 return값까지 만들어내는 것은 아니다.
lambda 예약어
패션코딩이다. def 함수 2줄을 눈뜨고 못보는 사람들을 위하여!
간결하고 효율적으로 쓸 때 쓰이는 경우가 있다.
def add(a,b):
return a+b
add = lambda a,b: a+b
result = add(3,4)
print(result)
Studying Date : 23.12.02~03
Studying Source : https://www.youtube.com/watch?v=X3aj1akeCU4&list=PLU9-uwewPMe05-khW3YcDEaHMk_qA-7lI&index=6, https://wikidocs.net/24
'Programming > Python' 카테고리의 다른 글
점프 투 파이썬 (7) 클래스 (3) | 2023.12.03 |
---|---|
점프 투 파이썬 (6) 입출력 (2) | 2023.12.03 |
점프 투 파이썬 (4) 제어문 If - While - For (2) | 2023.12.02 |
점프 투 파이썬 (3) 자료형, 변수 (3) | 2023.12.02 |
점프 투 파이썬 (2) 기초, 자료형 (2) | 2023.12.01 |