Molybdenum의 개발기록

[TIL] 8일차_PYTHON_Function_01 본문

TIL

[TIL] 8일차_PYTHON_Function_01

Molybdenum_j 2023. 3. 3. 13:44

Quiz. 로또 번호 출력(list)

1~45의 랜덤한 숫자 6개 출력

(숫자 6개가 중복데이터가 없어야 함)

 

 
list.append()
= list 데이터에 데이터를 추가

 

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)

▶ 함수(Function)

= 반복적으로 사용되는 코드를 묶어서 사용하는 방법으로 코드의 유지보수가 쉬워진다.

  • def, returm argument, parameter, docstring, scope, lambda
  • 사용법 : 함수선언(코드작성) -> 함수호출(코드실행)

▶ 함수선언(코드작성)

= 함수를 만든다

파이썬 함수 선언 =>  def 사용

def func():
    print("함수의 동작 구현")

 

▶ 함수호출(코드실행)

func()

▶ argument(인자) = 인수는 함수를 호출할 때, 함수에서 요구하는 매개변수에 전달하는 값이다.

▶ parameter(매개변수) = 함수나 메소드에서 사용할 값을 외부에서 받아들이기 위해 정의한 변수이다.

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

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

 

Quiz. 이해를 위한 예시 문제

  • 숫자의 범위와 숫자의 갯수를 argument로 설정해서 함수를 호출할 수 있도록 함수를 수정한다.
  • display_lotto를 호출할 때 파라미터가 없으면 1~45까지 6개의 숫자를 출력한다.
def display_lotto(count=6, end = 45): # count : parameter
    lotto = []
    while True:
        random_number = random.randint(1, end)
        lotto.append(random_number)
        lotto = list(set(lotto))
        if len(lotto) >= count:
            break
    lotto.sort()
    print(lotto)

display_lotto() # 1 ~ 45까지 6개의 숫자
display_lotto(end=50, count=10) # 1 ~ 50까지 10개의 숫자 <- end와 count 위치 변경 가능
display_lotto(10, 50) <- 위치변경되면 안됨

▶ return

= 함수를 호출해서 결과 데이터를 변수에 저장할 때

= 함수의 코드를 중단할 때

  • return이 있는 함수 예시 : str.upper
data = 'python'
result = data.upper()
print(data, result)

python PYTHON

 

  • return이 없는 함수 예시 : list.sort()
data = [1,2,3]
result = data.sort()
print(data, result)

[1, 2, 3] None

 

  • 여러 개의 데이터를 리턴
def calc(n1, n2):
    result = [n1 + n2, n1 - n2]
    return result

result = calc(3,1)
plus = result[0]
minus = result[1]
plus, minus

[4, 2]

 

=> 파이썬으로 작성 시 간단하게 작성가능

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

plus, minus = calc(3,1)
plus, minus

 

▶ 함수의 코드 실행 중단

def echo(msg, count=3):
    for idx in range(count): # [0,1,2,3,4,5,6]
        if idx >= 5:
            return
        print(msg)
    print('Done')
echo('python', 7)

▶ docstring

  • 함수의 설명을 작성 : 함수선언코드 바로 아래에 멀티라인 문자열로 작성
  • help() 함수로 docstring 출력
def plus(n1, n2):
    '''
    This function is to plus two numbers.
    
    parameters
    ----------
    n1 : int, float : first number
    n2 : int, float : second number

    return
    ------
    n1 + n2 : int, float
    '''
    return n1 + n2

 

  • docstring 출력

      plus + ctrl + spacebar

      or

     help(plus)

 

  • docstring 참고 사이트 - pandas

https://pandas.pydata.org/

 

pandas - Python Data Analysis Library

pandas pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language. Install pandas now!

pandas.pydata.org

 


 

▶ *args, **kwargs

  • argument의 갯수에 상관없이 함수를 실행하는 방법
    • * args : 여러 개의 argument를 tuple 데이터 타입으로 받아줌
def plus(*args, **kwargs): # 파라미터에 컬렉션 데이터 타입을 받아줌 : 식별자1개, 데이터n개
    print(type(args), args) # <- 키워드가 없는 아규먼트가 들어갔음
    print(type(kwargs), kwargs) # <- 키워드가 있는 아규먼트가 들어갔음 ( *의 갯수가 중요함 순서가 바뀌어도됨)
    # return n1 + n2

# 키워드 아규먼트는 키워드가 없는 아규먼트 뒤에 사용
# 디폴트 파라미터는 디폴트 값이 없는 파라미터 뒤에 사용
plus(1, 2, 3, 4, 5, n1=10, n2=30) # 여러개의 아규먼트

<class 'tuple'> (1,2,3,4,5)
<class 'dict'> {'n1': 10, 'n2': 30}
  • args, **kwargs : argument에서 사용
    • 파라미터 사용 : 여러 개의 아규먼트 -> 컬렉션 데이터 타입(tuple, dict)으로 묶어줌
    • 아규먼트 사용 : 컬렉션 데이터타입(list, tuple, dict) -> 여러 개의 아규먼트로 풀어줌
def echo(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)
data = [1, 2, 3]
echo(data)   # echo([1, 2, 3]) -> 아규먼트 : 1개, 데이터 타입 : list
echo(*data)  # echo(1, 2, 3) -> 아규먼트 : 3개, 데이터 타입 : 정수

<class 'tuple'> ([1, 2, 3],)
<class 'dict'> {}
<class 'tuple'> (1, 2, 3)
<class 'dict'> {}

 

▶ *args, **kwargs

  • parameter
    • 여러개의 아규먼트를 하나의 컬렉션 데이터타입(tuple,dict)으로 묶어서 받아준다.
    • *args : 키워드가 없는 여러개의 아규먼트를 받음 -> tuple
    • **kwargs : 키워드가 있는 여러개의 아규먼트를 받음 -> dict
  • argument
    • 묶여있는 컬렉션 데이터타입(list,tuple,dict) 을 여러개의 아규먼트로 풀어서 함수를 호출한다.
    • *args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 아규먼트로 풀어줌
    • **kwargs : dict 데이터타입의 데이터를 여러개의 키워드가 있는 아규먼트로 풀어줌

 


▶ 데이터베이스 접속 함수

def connect(**kwargs):
    print('connect :', kwargs['host'], kwargs['user'], kwargs['pw'])

 

Comments