점프 투 파이썬 (5) 함수

2023. 12. 3. 02:27·Programming/Python

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)
a = 1 
def vartest(a): 
    b = a +1 
    return b

c = vartest(a) 
print(c)​
2

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
'Programming/Python' 카테고리의 다른 글
  • 점프 투 파이썬 (7) 클래스
  • 점프 투 파이썬 (6) 입출력
  • 점프 투 파이썬 (4) 제어문 If - While - For
  • 점프 투 파이썬 (3) 자료형, 변수
Ctrl_engineer
Ctrl_engineer
Ctrl 키는 혼자일 때보다 다른 키와 함께할 때 진짜 힘을 발휘합니다. 데이터도, 사람도 마찬가지입니다. 연결되고 흐를 때, 세상은 더 나은 방향으로 움직입니다. 저는 데이터의 흐름을 설계하고, 신뢰를 심는 엔지니어가 되고자 합니다. 이곳은, 그 여정의 작은 흔적들을 기록하는 공간입니다.
  • Ctrl_engineer
    Ctrl the flow
    Ctrl_engineer
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • Research (9)
        • Raspberry Pi (9)
      • Data Enginnering (24)
        • Cloud (3)
        • Elastic (6)
        • Database (9)
        • Pipeline (3)
      • CS STUDY (0)
        • Computer Science (0)
        • DataStructure & Algorithm (0)
      • Programming (13)
        • Python (13)
      • Mathematics and Statistics (10)
      • Data Science (3)
        • Data Insight (2)
        • Learning (0)
        • ML & DL (0)
      • DIARY (0)
      • TIL (Today I Learned) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ssh 비밀번호 없이 접속
    linear algebra
    부스트코스
    py4e
    Statistics and Probability
    elasticSearch
    Khan Academy
    오블완
    점프투파이썬
    proxyjump 설정
    Khan
    heap size
    티스토리챌린지
    라즈베리파이5
    3blue1brown
    라즈베리파이 네트워크 설정
    climb-mates
    shellyplugs
    SQL
    spark
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Ctrl_engineer
점프 투 파이썬 (5) 함수
상단으로

티스토리툴바