본 내용의 출처는 파이썬 코딩도장파이썬 300제에 있으며, 추가한 내용이 있을 수 있습니다.

파이썬 코딩 도장

Unit 29. 함수 사용하기

Hello, world! 출력 함수 만들기


🔎 def

def 함수이름():
     코드
  • 'Hello, world!'를 출력하는 함수
>>> def hello():
...      print('Hello, world!')
... 

🔎 함수 호출하기

>>> hello()
Hello, world!

🔎 소스 파일에서 함수를 만들고 호출하기

def hello():
    print('Hello, world!')
 
hello()

🔎 함수 실행 순서

  • 파이썬 스크립트 최초 실행
  • hello 함수 호출
  • hello 함수 실행
  • print 함수 실행 및 'Hello, world!' 출력
  • hello 함수 종료
  • 파이썬 스크립트 종료

🔎 함수 작성과 함수 호출 순서

hello()         # hello 함수를 만들기 전에 함수를 먼저 호출
 
def hello():    # hello 함수를 만듦
    print('Hello, world!')
  • 실행결과
Traceback (most recent call last):
  File "C:\project\function.py", line 1, in <module>
    hello()    # hello 함수를 만들기 전에 함수를 먼저 호출
NameError: name 'hello' is not defined 


덧셈 함수 만들기


🔎 parameter

def 함수이름(매개변수1, 매개변수2):
    코드
  • 두 수를 더하는 함수 만들기
>>> def add(a, b):
...     print(a + b)
...
  • add 함수 호출해보기
>>> add(10, 20)
30



함수의 결과를 반환하기


🔎 함수에서 값을 꺼내기

def 함수이름(매개변수):
    return 반환값
  • 두 수를 더해서 반환하는 add 함수 만들기
>>> def add(a, b):
...     return a + b
...

  • 반환값의 경우 변수에 저장하지 않고 바로 다른 함수에 넣을 수도 있음.
>>> print(add(10, 20))
30


함수에서 값을 여러 개 반환하기


🔎 return에 값이나 변수를 ,로 구분해서 지정

def 함수이름(매개변수):
    return 반환값1, 반환값2
>>> def add_sub(a, b):
...     return a + b, a - b
...
>>> x, y = add_sub(10, 20)
>>> x
30
>>> y
-10

  • 여러개 반환 시 -> 실제로는 튜플이 반환
>>> x = add_sub(10, 20)
>>> x
(30, -10)
  • 언패킹
>>> x, y = (30, -10)
>>> x
30
>>> y
-10


함수의 호출 과정 알아보기


🔎 함수 여러 개를 만든 뒤의 각 함수 호출 과정 살펴보기

  • stack diagram으로 알아보기
def mul(a, b):
    c = a * b
    return c
 
def add(a, b):
    c = a + b
    print(c)
    d = mul(a, b)
    print(d)
 
x = 10
y = 20
add(x, y)
  • 실행결과
30
200
  • 전역 프레임

  • 함수 add의 스택 프레임

  • mul 함수의 스택 프레임

  • mul 함수가 끝남

  • add 함수가 끝남



퀴즈




연습문제: 몫과 나머지를 구하는 함수 만들기


def get_quotient_remainder(a, b):
    return a // b, a % b


심사문제: 사칙 연산 함수 만들기






Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기

위치 인수와 리스트 언패킹 사용하기


🔎 위치 인수

  • 리스트(튜플) 앞에 *(애스터리스크)를 붙여서 리스트 언패킹으로 넣을 수 있음.
def 함수이름(매개변수1, 매개변수2):    # 위치 인수를 사용하는 함수
    코드
 
함수(*리스트)    # 리스트 언패킹
함수(*튜플)      # 튜플 언패킹
  • 가변 인수 함수
def 함수이름(*매개변수):    # 위치 인수를 사용하는 가변 인수 함수
    코드
 
함수(인수1, 인수2)    # 인수 여러 개를 직접 넣기
함수(*리스트)         # 리스트 언패킹
함수(*튜플)           # 튜플 언패킹


키워드 인수 사용하기 & 키워드 인수와 딕셔너리 언패킹 사용하기


🔎 키워드 인수

  • 딕셔너리 앞에 ** (애스터리스크 두 개)를 붙여 딕셔너리 언패킹으로 넣기 가능
함수(키워드1=1, 키워드2=2)     # 함수를 키워드 인수 방식으로 호출
 
함수(**딕셔너리)    # 딕셔너리 언패킹
  • 가변 인수 함수
def 함수이름(**매개변수):    # 키워드 인수를 사용하는 가변 인수 함수
    코드
 
함수(키워드1=1, 키워드2=2)    # 키워드 인수를 직접 넣기
함수(**딕셔너리)                  # 딕셔너리 언패킹


매개변수에 초깃값 지정하기


🔎 매개변수의 초깃값

def 함수이름(매개변수=):    # 매개변수에 초깃값 지정
    코드
 
함수()    # 매개변수에 초깃값이 있으므로 인수를 비워두고 호출


퀴즈




연습문제: 가장 높은 점수를 구하는 함수 만들기


def get_max_score(*args):
    return max(args)


심사문제: 가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기






Unit 31. 함수에서 재귀호출 사용하기

재귀호출 사용하기


🔎 함수의 재귀호출

def factorial(n):   # 재귀호출로 팩토리얼을 구하는 함수
    if n == 1:      # n이 1일 때
        return 1    # 1을 반환하고 재귀호출을 끝냄
    return n * factorial(n - 1)    # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함


재귀호출로 팩토리얼 구하기


🔎 팩토리얼 알고리즘 만드는 법

def factorial(n):
    if n == 1:      # n이 1일 때
        return 1    # 1을 반환하고 재귀호출을 끝냄
    return n * factorial(n - 1)    # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
 
print(factorial(5))
  • 실행결과
120
  • 함수 호출

  • 함수 반환

  • 함수의 호출 순서와 계산 과정


퀴즈




연습문제: 재귀호출로 회문 판별하기


    if len(word) < 2:
        return True
    if word[0] != word[-1]:
        return False
    return is_palindrome(word[1:-1])


심사문제: 재귀호출로 피보나치 수 구하기






Unit 32. 람다 표현식 사용하기

람다 표현식으로 함수 만들기


🔎 람다 표현식

  • 람다 표현식 자체 호출 -> 람다 표현식을 ( )(괄호)로 묶은 뒤 다시 ( )를 붙이고 인수를 넣어서 호출
lambda 매개변수1, 매개변수2: 반환값                    # 람다 표현식으로 함수를 만듦
(lambda 매개변수1, 매개변수2: 반환값)(인수1, 인수2)    # 람다 표현식 자체를 호출
 
lambda 매개변수1, 매개변수2:1 if 조건식 else2    # 람다 표현식에서 조건부 표현식 사용
lambda x: str(x) if x % 3 == 0 else x
 
lambda 매개변수1, 매개변수2:1 if 조건식1 else2 if 조건식2 else3  # if를 여러 개 사용
lambda x: str(x) if x == 1 else float(x) if x == 2 else x + 10


람다 표현식에 조건부 표현식 사용하기


🔎 조건부 표현식

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: str(x) if x % 3 == 0 else x, a))
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]


🔎 map에 객체를 여러 개 넣기

>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 4, 6, 8, 10]
>>> list(map(lambda x, y: x * y, a, b))
[2, 8, 18, 32, 50]

🔎 filter 사용하기

>>> def f(x):
...     return x > 5 and x < 10
...
>>> a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
>>> list(filter(f, a))
[8, 7, 9]


🔎 reduce 사용하기

>>> def f(x, y):
...     return x + y
...
>>> a = [1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(f, a)
15

🔎 변수의 사용 범위

  • 전역 변수: 스크립트 전체에서 접근
  • 지역 변수: 해당 함수 안에서만 접근
  • 함수 안에서 전역 변수 사용: global에 변수 이름을 지정
  • 전역 변수가 없을 때: 함수 안에서 global을 사용하면 해당 변수는 전역 변수
x = 10    # 전역 변수
 
def foo():
    global x   # 전역 변수 x를 사용하겠다고 설정
    y = 10     # foo의 지역 변수


퀴즈




연습문제: 이미지 파일만 가져오기


list(filter(lambda x: x.find('.jpg') != -1 or x.find('.png') != -1, files))


심사문제: 파일 이름을 한꺼번에 바꾸기


profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글