점프 투 파이썬 (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
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Research (8)
        • Raspberry Pi (8)
      • 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바