01.Python 기초 - 함수(function)

ID짱재·2021년 2월 4일
0

Python

목록 보기
4/39
post-thumbnail

🌈 함수(function)

🔥 함수 구조

🔥 다양한 입력값(인수) 받기

🔥 함수의 결과값

🔥 매개변수 default 설정

🔥 함수에서 선언한 변수

🔥 Lamda


1. 함수 구조

  • def는 함수를 만들 때 사용하는 예약어이며, 함수 이름은 사용자가 임의로 만들 수 있음
  • 함수 이름 뒤 () :안의 매개변수는 이 함수의 입력으로 전달되는 값을 매계해주는 변수임.
  • 이 아래는 탭으로 간격을 준 후 수행할 문장을 입력함
  • 입력값이 있다는 것은 파라미터가 있기 떄문에 함수를 호출할 때 인수를 넣는다는 뜻임
  • 결과값이 있다는 것은 함수 본문에서 return으로 결과값을 처리해주는 경우를 뜻함

✍🏻 python

  # 함수 기본 구조1 : 일반적인 함수
def add(a,b): # a,b는 매개변수
    return a + b
result1 = add(2,8) # 2,8은 인수
print(result1) # 10
x = 10
y = 20
result2 = add(x,y) # x,y값은 인수
print(result2) # 30
# 함수 기본 구조2 : 입력값이 없는 함수
def say():
    return 'Hi'
print(say()) #Hi
# 함수 기본 구조3 : 결과값이 없는 함수
# 결과값이 있는 함수를 만들려면 무조건 return으로 받아야 함
def add2(a,b):
    print("%d, %d의 합은 %d입니다." %(a,b,a+b))
a = add2(3,4) # 3과 4의 합은 7입니다.
print(a) # none : add(3,4)는 결과값이 없음 출력했을 때 : none
# 함수 기본 구조4 : 압력값도 결과값도 없는 함수
def say1():
    print("Hi")
say1() # Hi
# 지역변수 vs 전역변수 이해1
def sum(a,b):
    print(a)
    return a + b
a = 1
print(sum(2,3))
print(a)
# 2 -> 함수안에 지역변수 출력 : print(a)
# 5 -> 함수의 결과값 출력
# 1 -> 전역변수 a 출력 : print(a)
# 지역변수 vs 전역변수 이해2
def sum(a,b):
    print(a)
    return a + b
a = 1
print(sum(a,3))
print(a)
# 1 -> 함수안에 지역변수 출력 : print(a) -> 전역변수 a가 함수안에 들어가서 출력됨
# 4 -> 함수의 결과값 출력(전역변수 a=1이 함수 안으로 들어감/ 1+4
# 1 -> 전역변수 a 출력 : print(a)

2. 다양한 입력값(인수) 받기

  • 입력값이 몇개가 될지 모르거나, 여러 개의 입력값을 받아야할 때는 매개변수로 *args를 넣음
  • args는 매개변수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 주로 사용함
  • 키워드 파라미터를 사용할 때는 별(**)개를 붙이고 일반적으로 **kwargs를 매개변수로 넣음

✍🏻 python

# *agrs를 매개변수를 활용1
def add_many(*args): 
    result = 0 
    for i in args: 
        result = result + i 
    return result 
reuslt1 = add_many(1,2)
reuslt2 = add_many(1,2,3)
reuslt3 = add_many(1,2,3,4)
reuslt4 = add_many(1,2,3,4,5)
print(reuslt1) # 3
print(reuslt2) # 6
print(reuslt3) # 10
print(reuslt4) # 15
# *agrs를 매개변수를 활용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
# *agrs를 매개변수를 활용1
def add_many(*args): 
    result = 0 
    for i in args: 
        result = result + i 
    return result 
reuslt1 = add_many(1,2)
reuslt2 = add_many(1,2,3)
reuslt3 = add_many(1,2,3,4)
reuslt4 = add_many(1,2,3,4,5)
print(reuslt1) # 3
print(reuslt2) # 6
print(reuslt3) # 10
print(reuslt4) # 15
# *agrs를 매개변수를 활용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
# 키워드 파라미터 **kwargs
def print_kwargs(**kwargs): # 매개변수는 딕셔너리가 되고 모든 key=value 형태로 딕셔너리에 저장
    print(kwargs)
print_kwargs(a=1) #{'a': 1}
print_kwargs(name='foo', age=3) # {'age': 3, 'name': 'foo'}

3. 함수의 결과값

  • 함수의 결과값(return)은 언제나 하나임.
  • 아래와 같이 return 뒤에 a+b와 a*b를 실행하게 하면 결과값을 튜플로 돌려줌
  • 다만, return을 여러개 적으면 첫번째 만난 return만 돌려주고 그 아래 return은 실행되지 않음

✍🏻 python

# 예시1 : return은 1개, 기능 2개 -> 튜플로 돌려줌
def add_and_mul(a,b): 
    return a+b, a*b    
result = add_and_mul(3,4)
print(result) # (7,12) -> 튜플로 돌려줌
# 예시2
def calculate(a,b):
    return a+b, a-b, a*b, a/b
result_all = calculate(10,2)
print(result_all) # (12, 8, 20, 5.0)
# return값이 여러개 일 때
def add_and_mul(a,b): 
    return a+b # 실행됨
    return a*b # 실행되지 않음
result = add_and_mul(2, 3)
print(result) # 5
# return의 다른 기능 : 빠져나가기
def say_nick(nick): 
    if nick == "바보": 
        return 
    print("나의 별명은 %s 입니다." % nick)
say_nick("바보") # 결과값도 없고, retur을 만나 함수를 즉시 빠져나옴
say_nick('야호') # 결과값은 없지만, 문자열은 출력함 -> 나의 별명은 야호입니다.

4. 매개변수 default 설정

  • 함수의 매개변수의 값을 미리 설정해 두면, 인수를 넣지않을 때 미리 설정해둔 값이 default로 사용됨
  • 단, 함수선언의 매개변수 순서와 함수 호출 때의 인수가의 순서가 일치해야 함

✍🏻 python

# 매개변수 초기값(기본값,default) 미리 세팅
def say_myself(name, old, man=True): # man = true를 기본값으로 설정해서, 인수로 들어오지 않으면 기본값 사용
    print("나의 이름은 %s 입니다." % name) 
    print("나이는 %d살입니다." % old) 
    if man: 
        print("남자입니다.")
    else: 
        print("여자입니다.")
say_myself("jewon", 20) # 세번째 인수로 man=True이 default로 처리되어 출력됨
say_myself("jewon", 20, True) # 위 출력값
say_myself("jewon", True, 20) 
# 맵핑을 제대로하지 않으면, True는 숫자로 1로 바껴 1살로 나오고, 숫자 27은 True가되어 남자입니다가 출력됨

5. 함수 안에서 선언한 변수

  • 함수의 안에서 선언된 변수는 함수 내에서만 생명을 갖고 있기 떄문에 함수 밖에서는 변수를 찾을 수 없음
  • 함수 밖에서도 함수 내에 선언된 변수를 활용하기 위해서는 return을 통해 값을 밖으로 돌려주어야 함

✍🏻 python

a = 1
def vartest(a):
    a = a +1
result1 = vartest(a) 
print(result1) # None => a = a + 1은 함수 내부에서 작동하지만 함수 밖으로 반환되지 않음.
result2 = vartest(1) 
print(result2) # None 
print(a) # 1 -> 전역 변수 a가 호출된 결과
# 함수 안에서 선언된 변수를 함수 밖에서 호출하는 방법 : return
b = 1 
def vartest(b): 
    b = b +1 # 함수 안에서 선언된 b 
    return b # 함수 밖에서도 이용할 수 있도록 return
b = vartest(b) 
print(b) # 2

6. Lambda

  • 함수를 1줄로 간결하게 만들 때 사용함
  • def를 사용해야할 정도로 복잡하지 않거나, def를 사용할 수 없는 곳에 주로 쓰임

✍🏻 python

# 일반적인 함수 선언 : def
def add(a, b):
    return a+b
result = add(3, 4)
print(result)
# Lambda 함수 선언 : 위의 함수와 같음
# 함수명 = lambda (a,b): a+b 
# 1)def삭제, 2)함수명 앞으로 빼주기, 3) = lambda, 4) 파라미터, 5) body(return 생략) => 함수명 = lambda (파라미터): 함수 body
add = lambda a, b: a+b
result = add(3, 4)
print(result) # 7
profile
Keep Going, Keep Coding!

0개의 댓글