List
- 파이썬 프로그램의 입력과 출력
- 함수
- 사용자 입력과 출력
- 파일 읽고 쓰기
- 연습문제
함수
와 같다.어떤 입력값을 주었을 때 어떤 결괏값을 돌려준다
라 식의 함수로 작성def 함수이름(매개변수):
<수행할 문장1>
<수행할 문장2>
...
def
: 함수를 만들 때 사용하는 예약어함수이름
: 함수를 만드는 사람이 임의로 만들면 된다.(매개변수)
: 함수에 입력으로 전달되는 값을 받는 변수수행할 문장
: 함수 정의 후 함수에서 수행할 문장을 쓰면 된다.def add(a, b): # 함수이름은 add이고 입력으로 2개의 값을 받으며 결괏값은 2개의 입력값을 더한 값이다.
return a + b #이때 return은 함수의 결과값을 돌려주는 명령어다.
>>> a = 3
>>> b = 4
>>> c = add(a, b)
>>> print(c)
7
매개변수(parameter)
: 입력으로 전달된 값을 받는 변수인수(arguments)
: 인수는 함수를 호출할 때 전달하는 입력값def add(a, b):
return a+b
print(add(3, 4)) # 3, 4는 인수
- 입력값 ---> 함수 ---> 결과값
입력값
과 결과값
이 있는 함수 (일반적인 함수)결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
def 함수이름(매개변수):
<수행할 문장>
...
return 결과값
def add(a, b):
result = a + b
return result
>>> a = add(3, 4) # 입력값은 3, 4 이며 '인수'임
>>> print(a) # a 는 `매개변수`
7
결괏값을 받을 변수 = 함수이름()
>>> def say(): # 매개변수 부분인 괄호가 비어있다.
... return 'Hi'
...
>>>
>>> a = say()
>>> print(a)
Hi
함수이름(입력인수1, 입력인수2, ...)
>>> def add(a, b):
print("%d, %d의 합은 %d입니다." % (a, b, a+b)) # 수행 문장일 뿐 결과값이 아니다.
>>> a = add(3, 4)
3, 4의 합은 7입니다.
>>> print(a)
None # 결과값에 변수 대입했을 때 결과가 없는 것을 알 수 있다.
함수이름()
>>> def say():
print('Hi') # 인수를 받는 변수도 없고, 결과값을 받는 return문도 없다
>>> print(say())
Hi
>>> a = say()
Hi
>>> print(a)
None
>>> def add(a, b):
... return a+b
...
>>> result = add(a=3, b=7) # a에 3, b에 7을 전달
>>> print(result)
10
>>> result = add(b=5, a=3) # b에 5, a에 3을 전달
>>> print(result)
8
함수이름(*매개변수)
: 여러개의 숫자를 입력 할 수 있는 (*매개변수)
이며, (매개변수)
와는 다르다 def 함수이름(*매개변수):
<수행할 문장>
...
*** 여러개의 입력값을 모두 더하는 함수
>>> def add_many(*args): # 여기서 *args는 임의로 쓴거고 다른것으로 바꾸어도 된다.
result = 0
for i in args:
result = result + i
return result
>>> result = add_many(1,2,3)
>>> print(result)
6
>>> result = add_many(1,2,3,4,5,6,7,8,9,10)
>>> print(result)
55
함수(매개변수1, *매개변수2)
: 매개변수1
을choice
로 주고 실행할 문장에 if문
과 elif문
으로 구성한다. 매개변수2
의 입력인수
를 가지고 출력값을 낸다.>>> def add_mul(choice, *args):
if choice == "add":
result = 0
for i in args:
result = result + i
elif 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
함수이름(**매개변수)
: **매개변수
는 딕셔너리로 로 만들어져서 출력된다.>>> def print_kwargs(**kwargs):
... print(kwargs)
...
>>> print_kwargs(a=1) # 이떄 입력값은 "x=y"형태로 이루어 져야한다
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}
>>> def add_and_mul(a,b):
return a+b, a*b
*** add_and_mul 함수의 결괏값 a+b와 a*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.
>>> result = add_and_mul(3,4)
>>> print(result)
(7, 12)
>>> result1, result2 = add_and_mul(3, 4)
>>> print(result1)
7
>>> print(result2)
12
return문
이 2개인 경우엔 맨 처음꺼만 진행된다.>>> def add_and_mul(a,b):
... return a+b
... return a*b
...
>>> result = add_and_mul(2, 3)
>>> print(result)
5
return문
을 통해서 함수 빠져나가기 break
와 비슷한 활용>>> def say_nick(nick):
if nick == "바보":
return
print("나의 별명은 %s 입니다." % nick)
>>> say_nick('야호') # 입력인수가 바보가 아니기 때문에 출력 / 결과값은 아님
나의 별명은 야호입니다.
>>> say_nick('바보') # 입력인수가 바보 이기때문에 나감
>>>
say_myself(매개변수1, 매개변수2, 매개변수3)
은 3개의 매개변수를 받는다.매개변수3
은 man = True
처럼 매개변수에 미리 값을 넣어 준 것임매개변수의 마지막
에 위치해야한다>>> def say_myself(name, old, man=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
>>> say_myself('seungho shin', 31, True)
나의 이름은 seungho shin 입니다.
나이는 31살입니다.
남자입니다.
>>> say_myself('seungho shin', 31, False)
나의 이름은 seungho shin 입니다.
나이는 31살입니다.
여자입니다.
*** 매개변수 초깃값을 설정하려고 할 때 매개변수 마지막에 위치시키지 않으면 아예 오류가 난다.
>>> def say_myself(name, man=True, old):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
SyntaxError: non-default argument follows default argument
>>>
a = 1
def vartest(a):
a = a + 1
vartest(3)
print(a)
1
- 이때 1이 나오는 이유는
def vartest(a)
에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용하는 변수이지 함수 밖의 변수 a가 아니라는 뜻
def vartest(a):
a = a + 1
vartest(3)
print(a)
Traceback (most recent call last):
File "/Users/SEUNGHOSHIN/Documents/1.py", line 5, in <module>
print(a)
NameError: name 'a' is not defined
이때 오류가 나는 이유는
print(a)
에서 a는 어디에도 정의 되어있지 않기 때문이다.
return
을 사용 한다return문
을 넣지 않았을 경우a = 1
def vartest(a):
a = a + 1
a = vartest(a)
print(a)
none # 이때 값이 `none`이 나오는 이유는 `return` 값을 설정해 두지 않았기 때문
return문
을 설정해 두었을 경우a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a)
2 # return문 을 설정해 두니 `2`가 출력 된다
lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식
lambda
: 함수를 만들 때 사용하는 예약어>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
***위의 함수와 동일하다
>>> def add(a, b):
... return a+b
...
>>> result = add(3, 4)
>>> print(result)
7
※
lambda
예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.