AI School 8기 (LIKELION, 22.12~23.05)

[AI School/TIL] Python 3일차_23.01.04

data_start_ 2024. 2. 23. 15:33

 

2023.01.04 (수) 파이썬 3번째 강의를 들었습니다.

 

[Python 문법 3]

오늘은 오늘은 함수에 대해서 배웠습니다. 언제 어떻게 사용하고, 어떤 장점이 있는지를 중점적으로 알 수 있었습니다.

 

1. 함수 : 반복적으로 사용되는 코드를 묶어서 사용하는 방법 (코드의 유지보수가 쉬워짐)

  • def, return, argument, parameter, docstring, scope, lamda
  • 사용방법 : 함수 선언 (코드 작성) -> 함수 호출 (코드 실행)
  • def
import random

# 1. 로또번호 저장 변수 생성
lotto = []

# 2. 아래의 코드 반복 : while
while True:

#   2-1. 1 ~ 45 랜덤한 숫자 출력 후 저장 : random_number : random.randint()
    random_number = random.randint(1, 45)

#   2-2. lotto 리스트에 random_number 없으면, random_number를 lotto 변수에 추가 : list.append()
    # if random_number not in lotto:
    #     lotto.append(random_number)

#   2-2. random_number를 lotto 변수에 추가 : list.append()
    lotto.append(random_number)
    lotto = list(set(lotto))

#   2-3. lotto의 데이터 갯수가 6개 이상이면 반복 중단 : if, len(), break
    if len(lotto) >= 6:
        break

# 3. 로또번호 출력 : print()
lotto.sort()
print(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)

# 파이썬출력
print('python')

# 로또번호출력
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)
 

로또번호 출력을 7번 하고 싶다면? 로또번호출력 코드를 7번 붙여넣어야 하는 번거로움이 발생함.

이 때, 함수를 이용해서 해결할 수 있다.

 

# 함수선언(코드작성)
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()
 
# 함수선언
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()

# 파이썬출력
print('python')

# 로또번호출력
display_lotto()
 

함수 로직을 1번만 수정해서 사용하면 되서, 효율성이 높아진다.

 

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

-parameter(함수 선언)는 변수로 생각하기

-argument(코드 실행)

-parameter와 argument는 개수가 동일해야 함, default parameter를 설정하면 동일한 개수가 아니어도 작동함

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

# 함수호출(코드실행)
plus(1, 2) # 1, 2 : argument
 

출력 결과 -> 3

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

# 함수호출(코드실행)
plus(1, 5) # 1 : argument
 

출력 결과 -> 26

 

n1과 n3사이에 디폴드 파라미터가 20개가 있다고 하면?

keyword 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=1000 : keyword argument
 

 

* 심화 *

여러개의 데이터를 보냈을 때, 파라미터에서 컬렉션 데이터 타입으로 받아주면 1개의 식별자로 n개의 데이터 받을 수 있음

아규스 : 여러개 데이터를 하나의 변수로 받아줌 (키워드 없는 경우)

키워드아규스 : 키워드가 있는 거는 딕셔너리로 (키워드 있는 경우)

키워드아규먼트는 키워드가 없는 아규먼트 뒤에 와야 함

디폴트 파라미터는 디폴트 값이 없는 파라미터 뒤에 사용

 

 

  • return : 함수를 호출해서 결과로 나온 데이터를 다른 변수에 저장할 때, 함수의 코드를 중단할 때 사용(break처럼)

-브레이크는 반복문만 빠져나오고, 리턴은 함수 코드를 중단시킴 (브레이크였으면 'Done'이 출력)

# 함수의 코드 실행 중단
def echo(msg, count=2):
    for idx in range(count):
        if idx >= 3:
            return
        print(msg)
    print('Done')
 

출력결과-> python

python

python

 

  • docstring : 함수의 설명을 작성하는 것, 함수선언코드 바로 아래에 멀티라인 문자열로 작성
  • scope : 함수 밖(global / 전역영역) 함수 안 (local / 지역영역)
  • lambda : 간단한 함수를 함수 선언 없이 사용 (데이터 전처리할 때 자주 사용하는 함수)

 

2. list comprehension : 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때 사용하는 문법

  • 주로 리스트 데이터를 필터링 하거나 데이터를 변경할 때 사용