단상:

파이썬 설치하고 2주차인데 처음에 비해 꽤 많은 걸 할 수 있게 됐다. 공부한 걸 체득하고, 문제 풀이에 앞서 문제를 이해하고 어떻게 풀 것인지 구조를 잡는 부분에 익숙해질 때까지 시간이 더 필요하겠지만, 중요한 건 분명히 발전하고 있다는 것!


함수 def function():

  • 함수를 사용하면 중복되는 작업을 하지 않아도 되어 편리하다.
  • 내장함수: 파이썬이 기본적으로 제공하는 함수
    - 예) print(), len(), pow(), sqrt(), find() 등
  • 사용자 함수: 사용자가 직접 선언하는 함수
    - 필요한 함수를 잘 만들어두는 것이 효율적

함수 선언 조건

  1. def 키워드로 함수임을 명시
  2. 함수명은 자유롭게 작명하되, 첫 글자에 숫자와 특수문자는 사용 불가
  3. 괄호()는 인풋데이터를 넣을 때 사용되며, 없으면 비워도 됨
  4. 콜론(:)으로 작명 완성
  5. 실행부는 반드시 들여쓰기로 작성

함수의 사용

  • 함수명() 입력하여 호출
  • 함수 안에 또 다른 함수를 넣을 수 있고, 외부 함수를 호출할 수도 있다.
  • 함수1 안에 함수2가 들어있는 경우:
    - 함수1 실행 중, 함수2를 실행
    - 함수2의 실행문을 모두 실행한 다음
    - 다시 함수1로 돌아와 나머지 실행문을 실행
  • pass 키워드로 생략 가능
def func1():
    print('call func1')
    func2()   # 중간에 이렇게 끼워서 호출하면
    print('fun2 호출 후에 실행됨')   # func2 실행 후에 이 줄이 실행됨
    
def func2():
    print('call func2')
<result>
call func1
call func2
fun2 호출 후에 실행됨

인수와 매개변수

  • 함수 호출 시 함수에 데이터를 전달할 수 있다.
  • 매개변수: 함수 내에서만 사용하는 변수, 데이터를 받을 준비
    - 함수 호출부에서 전달한 데이터를 함수 내에서 사용할 수 있음
  • 인수: 나중에 함수 호출할 때 던지는 데이터
    - 필요한 만큼 넘길 수 있고, 함수 선언부에서도 그만큼 받을 준비 되어있어야 함
    - 문자, 숫자 등 받을 수 있다.
  • 인수와 매개변수는 항상 쌍을 이루므로, 개수가 같아야 함
  • 매개변수의 개수가 정해지지 않은 경우 : 매개변수명 앞에 asterisk(*) 붙임
    - 이 경우, 반환되는 값의 자료형은 튜플
def printNum(*numbers):
    for i in numbers:
        print(i)
        print(type(numbers))

printNum()
printNum(10)
<result>
10
<class 'tuple'>
10
<class 'tuple'>
20
<class 'tuple'>
30
<class 'tuple'>

데이터의 반환 return

  • 함수 실행문 안에 return 키워드를 사용해 함수의 결과 데이터를 함수 호출부에 전달할 수 있다.
  • 반환한 값을 또 다른 변수에 할당할 수도 있고, 다른 함수에 사용할 수도 있다.
  • 함수가 실행부에서 return을 만나면, 실행을 종료한다.
    - 함수 내부 조건문에서도 return을 만나면 함수 실행 종료 및 결과 반환
  • 함수를 실행해 return으로 반환받더라도 변수 선언 안 하고 그냥 둘 수도 있다.
  • return 없이 값을 print()하면 이 값을 이용할 수 없다.
# return한 경우
def cal(n1, n2):
    result = n1 + n2

    return result

print(cal(10, 20))   
print(type(cal(10, 20)))

# return 없이 프린트한 경우, 데이터를 다시 이용할 수 없음
def cal2(n1, n2):
    print(n1 + n2)

print(type(cal2(10, 20)))   # 데이터타입이 다름
<result>
30
<class 'int'>
30
<class 'NoneType'>

전역변수

  • 함수 밖에 선언된 변수로 함수 안팎 어디서나 사용할 수 있다.
    - 단, 함수 안에서 전역변수를 변경하면 함수 내부에서만 변경된 값으로 사용 가능
    - 함수 안에서만 사용되는 지역변수로서 새 변수 선언한 것과 같음
    - 함수 밖에서는 함수에서 변경된 값 반영 안 됨

지역변수

  • 함수 안에서 선언된 변수로 함수 안에서만 사용할 수 있다.

Global 키워드

  • 함수 내에서 전역변수를 수정하고 싶을 때 사용한다.
    - 변수 앞에 global 키워드 붙임

중첩함수

  • 함수 안에 또 다른 함수가 있는 형태
  • 함수 내부에서 호출해서 사용할 수 있고, 함수 밖에서는 사용할 수 없다!
def calculator(n1, n2, operator):
    
    def add():
        print('덧셈 연산: {}'.format(round(n1 + n2, 2)))
        
    def sub():
        print('뺄셈 연산: {}'.format(round(n1 - n2, 2)))
        
    def mul():
        print('곱셈 연산: {}'.format(round(n1 * n2, 2)))
        
    def div():
        print('나눗셈 연산: {}'.format(round(n1 / n2, 2)))
        
    if operator == 1:
        add()
        
    elif operator == 2:
        sub()
        
    elif operator == 3:
        mul()
        
    elif operator == 4:
        div()

while True:
    n1 = float(input('실수(n1) 입력: '))
    n2 = float(input('실수(n2) 입력: '))
    operator = int(input('1. 덧셈,  2. 뺄셈,  3.곱셈,  4. 나눗셈,  5. 종료\n입력: '))

    if operator == 5:
        print('종료되었습니다.')
        break

    else:
        calculator(n1, n2, operator)
<result>
실수(n1) 입력: 3
실수(n2) 입력: 5
1. 덧셈,  2. 뺄셈,  3.곱셈,  4. 나눗셈,  5. 종료
입력: 1
덧셈 연산: 8.0
실수(n1) 입력: 6
실수(n2) 입력: 4
1. 덧셈,  2. 뺄셈,  3.곱셈,  4. 나눗셈,  5. 종료
입력: 3
곱셈 연산: 24.0
실수(n1) 입력: 1
실수(n2) 입력: 0
1. 덧셈,  2. 뺄셈,  3.곱셈,  4. 나눗셈,  5. 종료
입력: 5
종료되었습니다.

lambda 키워드로 함수 선언하기

  • 간단한 함수 같은 경우는 람다로 사용하면 간결해진다.
  • lambda 파라미터1, 파라미터2 : 실행문 <- 형태
  • 사용법은 함수 사용과 동일하다.
getTriangle = lambda n1, n2: n1 * n2 / 2
getSquare = lambda n1, n2: n1 * n2
getCircle = lambda n1: n1 * n1 * 3.14

width = int(input('가로: '))
height = int(input('세로: '))
r = int(input('반지름: '))

triangle = getTriangle(width, height)
square = getSquare(width, height)
circle = getCircle(r)

print(f'삼각형 넓이: {triangle}')
print(f'사각형 넓이: {square}')
print(f'원 넓이: {circle}')
<result>
가로: 20
세로: 30
반지름: 6
삼각형 넓이: 300.0
사각형 넓이: 600
원 넓이: 113.04

0개의 댓글

Powered by GraphCDN, the GraphQL CDN