Python 기초, 입출력(함수)
본문 바로가기
programming/Python

Python 기초, 입출력(함수)

by 코딩하는 핑가 2020. 9. 16.
반응형

1. 함수

* 구조

def 함수명(매개변수):
    <수행할 문장1>
    <수행할 문장2>
    ...

"""
이 함수의 이름(함수 이름)은 add이고 입력으로 2개의 값을 받으며,
결괏값은 2개의 입력값을 더한 값이다.
"""
def add(a, b): 
    return a + b
    
>>> a = 3
>>> b = 4
>>> c = add(a, b)
>>> print(c)
7

- def : 함수를 만들 떄 사용하는 예약어

 

* 매개변수(parameter)

- 함수에 입력으로 전달된 값을 받는 변수

 

* 인수(arguments)

- 함수를 호출할 때 전달하는 입력값

def add(a, b):  # a, b는 매개변수
    return a+b

print(add(3, 4))  # 3, 4는 인수

 

* 일반적인 함수, 입력값, 결과값이 없는 함수, 둘 다 없는 함수

"일반적인 함수"
def 함수이름(매개변수):
    <수행할 문장>
    ...
    return 결과값

def add(a, b): 
    result = a + b 
    return result
    
    
"입력값이 없는 함수"
>>> def say(): 
...     return 'Hi' 
... 
>>>
>>> a = say()
>>> print(a)
Hi


"결괏값이 없는 함수"
>>> def add(a, b): 
...     print("%d, %d의 합은 %d입니다." % (a, b, a+b))
... 
>>>
>>> a = add(3, 4)
>>> print(a)
None
"print는 <수행말 문장>에 해당하는 부분일 뿐 결괏값은 없다."


"입력값도 결괏값도 없는 함수"
>>> def say(): 
...     print('Hi')
... 
>>>
>>> say()
Hi
"입력 인수를 받는 매개변수도 없고 return문도 없음"

 

* 매개변수 지정하여 호출

>>> 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): 
...     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


"다른 예"
>>> 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

 

* 키워드 파라미터 kwargs

>>> def print_kwargs(**kwargs):
...     print(kwargs)
...
...
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

- **kwargs처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장됨

 

* 함수의 결괏값은 언제나 하나이다

"""
add_and_mul 함수는 2개의 입력 인수를 받아 더한 값과 곲한 값을 돌려주는 함수
"""
>>> def add_and_mul(a,b): 
...     return a+b, a*b

"호출"
>>> result = add_and_mul(3,4)
"""
결괏값은 a+b / a*b 2개인데 결괏값을 받아들이는 변수는 result 하나만 쓰였으니 오류가 발생하지 않을까?
( 오류는 발생하지 않는다. )
a+b와 a*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.
"""
result = (7, 12)

"하나의 튜플 값을 2개의 결괏값처럼 받고 싶을 때"
>>> result1, result2 = add_and_mul(3, 4)

 

* 매개변수에 초깃값 미리 설정하기

def say_myself(name, old, man=True): 
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")
        
say_myself("박응용", 27)
say_myself("박응용", 27, True)

나의 이름은 박응용입니다.
나이는 27살입니다.
남자입니다.

- 초기화시키고 싶은 매개변수를 항상 뒤쪽에 놓아야 함

 

* 함수 안에서 함수 밖의 변수를 변경하는 방법

a = 1
def vartest(a):
    a = a +1

vartest(a)
print(a)

2
1
"/////////////////////////////"

def vartest(a):
    a = a + 1

vartest(3)
print(a)

4
에러

"함수 안에서 선언한 매개변수는 함수 안에서만 사용될 뿐 함수 밖에서는 사용되지 않는다."
"vartest 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가"

#1. return 사용
a = 1 
def vartest(a): 
    a = a +1 
    return a

a = vartest(a) 
print(a)

#2. global 명령어 사용 (권장x)
a = 1 
def vartest(): 
    global a 
    a = a+1

vartest() 
print(a)

 

* lambda

- 함수를 한줄로 간결하게 만들 때 사용

- def를 사용해야할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰임

# lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식

>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
# lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려줌

>>> def add(a, b):
...     return a+b
...
>>> result = add(3, 4)
>>> print(result)
7

점프 투 파이썬

반응형

댓글