[230104] 멋쟁이사자처럼 AI SCHOOL 8기 'Python_박두진강사님' 복습

조세연·2023년 1월 4일
0

멋사 AI SCHOOL 8기

목록 보기
7/35

📝Today I learned

🚀 TIL 핵심 요약 🚀

  • 함수
    • 함수 사용법
    • argument & parameter
    • return
    • docstring
    • scope
    • lambda

함수

  • 반복적으로 사용되는 코드를 묶어서 사용
  • 코드의 유지보수 용이

1) 함수사용법

  1. 함수선언 : 코드 작성
  2. 함수호출 : 코드 실행

🔹 함수 활용 예시

# 함수선언(코드작성)
def display_lotto():
    lotto = []
    while True:
        random_number = random.randint(1, 45)
        lotto.append(random_number)
        lotto = list(set(lotto))
        if len(lotto) >= 6:
            break
    lotto.sort()
    print(lotto)

# 함수호출(코드실행)
display_lotto()

2) argument & parameter

: 함수를 호출하는 코드에서 함수를 선언하는 코드로 데이터 전달할 때 사용

  • argument : 함수 호출 코드에 사용
  • parameter : 함수 선언 코드에 사용

🔹 예시

import random

# 함수선언
def display_lotto(count): # count : parameter
    lotto = []
    while True:
        random_number = random.randint(1, 45)
        lotto.append(random_number)
        lotto = list(set(lotto))
        if len(lotto) >= count:
            break
    lotto.sort()
    print(lotto)

# 로또번호 6개 출력
display_lotto(6) # 6 : argument

# 로또번호 7개 출력
display_lotto(7) # 7 : argument

🔹 default parameter
: default parameter를 설정하면 argument를 입력하지 않아도 설정된 값으로 연산을 수행

# 함수선언(코드작성)
def plus(n1, n2=10, n3=20): # n1 : parameter, n2=10, n3=20 : default parameter
    print(n1 + n2 + n3)

# 함수호출(코드실행)
plus(1, n3=100) # 1 : argument, n3=100 : keyword argument
  • keyword argument : default parameter가 아닌 다른 값으로 연산을 수행하고 싶을 때 직접 입력

🔹 주의할 점
: default parameter는 항상 default값이 없는 parameter 뒤에 와야 함. 순서를 잘 지킬 것.

3) return

: 함수의 결과 데이터를 변수에 저장할 때 사용
: return 값을 도출하면 함수 코드가 중단됨
(🚨주의! 반복문이 중단되는 것이 아님. 반복문 중단은 break)

🔹 print와 return 비교

def plus1(n1, n2):
    print(n1 + n2)

def plus2(n1, n2):
    return n1 + n2
    
result1 = plus1(1, 2) # 결과가 변수에 저장되지 않음. print()로 그냥 출력할 뿐
result2 = plus2(2, 3) # 결과가 변수에 저장됨
print(result1, result2) # None, 5

🔹 return에 대한 2가지 경우
case 1) return이 있는 함수
: 데이터를 변경하지 않고 변경 결과를 변수에 저장
(ex. str.upper())

case 2) return이 없는 함수
: 데이터를 변경하고 변경 결과를 변수에 저장하지 않는 경우
(ex. list.sort())

(참고. 데이터를 변경하고 변경 결과를 변수에 저장하는 경우도 있긴 있음.)

🔹 함수를 중단시키는 return

def echo(msg, count):
    for idx in range(count):
        if idx > 5:
            return # return하는 순간 함수 중단
        print(msg)
    print('Done') # return 자리에 break를 적었다면 'Done'이 출력됨

🔹 여러 개의 데이터를 return할 때

def calc(n1, n2):
    return n1 + n2, n1 - n2 # tuple

plus, minus = calc(3, 1) # tuple은 python에서 각각 따로 데이터를 받을 수 있음.

plus # 4
minus # 2

4) docstring

: 함수를 설명하는 글

🔹 docstring에 포함되어야하는 내용

  • 함수에 대한 개괄적인 설명
  • parameter 설명
  • return값 설명
def plus(n1, n2):
    '''
    This function is to plus two numbers. # 1. 함수에 대한 설명
    
    parameters # 2. 파라미터 설명
    ----------
    n1 : int, float : first number
    n2 : int, float : second number

    return # 3. return 설명
    -----
    n1 + n2 : int, float
    '''
    return n1 + n2

🔹 docstring 확인하는 방법

  • 함수 입력 후 ctrl+space
  • help() 함수 활용

5) *arg, **kwargs

: argument의 개수에 상관없이 함수를 실행하는 방법

  • *args : 여러 개의 argument를 tuple로 받아줌 (keyward 없음)
  • **kwargs : 여러 개의 keyward argument를 dictionary로 받아줌 (keyward 있음)

🔹 예시

def plus(*args, **kwargs): # parameter에 컬렉션 데이터 타입을 받아줌 : 식별자 1개, 데이터 n개
    print(type(args), args)
    print(type(kwargs), kwargs)

plus(1, 2, 3, 4, 5, n1=10, n2=30) # 여러 개의 arguments

결과
<class 'tuple'> (1, 2, 3, 4, 5)
<class 'dict'> {'n1': 10, 'n2': 30}

=> parameter에서 *arg, **kwargs가 사용될 경우 여러 개의 arguemnt를 컬렉션 타입(tuple, dictionary)으로 묶어서 받아준다고 생각하면 쉬움.

그럼 그 반대의 경우도 살펴보자.

🔹 argument에서의 사용

def echo(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)
 
data = [1, 2, 3]
echo(*data) # echo(1, 2, 3) > 아규먼트 : 3개, 데이터타입 : 정수

data = {'num1': 10, 'num2': 20}
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수

결과
<class 'tuple'> (1, 2, 3)
<class 'dict'> {'num1': 10, 'num2': 20}

=> argument에서 *arg, **kwargs가 사용될 경우 컬렉션 타입(list, tuple, dictionary)으로 묶인 것을 여러 개의 argument로 풀어준다고 생각하면 쉬움.

🔹 주의할 점
: parameter에서 언급했듯이 순서가 중요. keyword argument는 반드시 keyword가 없는 argument 뒤에 위치해야함.

6) scope

🔹 변수 적용 범위

  • 함수 밖 : 전역영역 (global)
  • 함수 안 : 지역영역 (local)
data = 10 # global

def change():
    data = 20 # local

change()
print(data) # 10
# global : 지역영역에서 전역영역의 변수 사용 방법
data = 10

def change():
    global data
    data = 20

change()
print(data) # 20
# return : 전역영역에서 지역영역의 변수 사용 방법
data = 10

def change():
    data = 20
    return data

data = change()
print(data) # 20

전역에서 지역으로, 지역에서 전역으로... 이 부분 이해가 안된다.

7) lambda

: 간단한 함수(parameter, return)를 함수 선언 없이 사용할 수 있는 일회성 함수
: 메모리 절약, 가독성 향상

plus = lambda n1, n2 : n1 + n2
plus(1, 2) # 3

🔹 list comprehension
: 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때 사용하는 문법
: 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용
: 속도 빠름

result = [number**2 for number in range(10) if number % 2]
result

❗이것만은 외우고 자자 Top 3

📌순서 주의
non default parameter > default parameter
non keyword argument > keyword argument

📌함수를 중단시키는 것이 return. 반복문을 중단시키는 것은 break.

📌*arg, **kwargs
parameter에 위치: 여러 개 argument를 묶어서 받음
argument에 위치: 컬렉션 타입 데이터를 풀어줌

🌟데일리 피드백

1. 오늘의 칭찬

몸이 너무 안 좋아서 3시에 조퇴할까 생각했지만 참고 복습 및 TIL을 무사히 끝냈다. 오늘 처음으로 용기내어 강사님께 질문을 했다. 능동적으로 배우는 과정이 즐겁다.

2. 오늘의 반성

중간에 졸려서 잠깐 정신을 잃었다. 수업이 지루해서가 아니라 코막힘으로 인해 피곤함이 쌓였던 것... 컨디션을 회복하자!

3. 내일의 목표

전역변수, 지역변수 정확한 의미 질문하고 확실히 내 것으로 만들기

profile
HR Analyst가 되고 싶은

0개의 댓글