euny!
errorlog
euny!
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • Python (13)
    • 데이터분석 (3)
    • WIL (4)
    • SQL (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 웹스크래핑
  • SQL
  • 웹크롤링
  • 크롤링
  • BeautifulSoup
  • ㅗ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
euny!

errorlog

[Python] 기초 문법 - 함수
Python

[Python] 기초 문법 - 함수

2023. 1. 4. 16:09

함수

- 반복적으로 사용되는 코드를 묶어서 사용하는 방법 > 코드의 유지보수가 쉬워짐

- def, return, argument, parameter, docstring, scope, lambda

 

def

- 함수 선언

parameter : 매개변수, 함수를 선언할때 나열되는 변수

argument : 전달인자, 함수를 호출할 때 전달되는 실제 값

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)

>> [1, 6, 10, 15, 17, 35]
[7, 11, 12, 17, 26, 37, 40]

return

return이 있는 함수 예시

1. str.upper() : 함수를 호출해서 결과 데이터를 변수에 저장할 때

data ='python'
result = data.upper()
print(data, result)
>> python PYTHON

2. 함수의 코드를 중단할 때

def echo(msg, count=3):
    for idx in range(count):
        if idx >= 5:
            return
        print(msg)
    print('Done')
    
 echo('python', 7)
    
 >> python
python
python
python
python

return이 없는 함수 예시 : list.sort()

data = [1, 3, 2]
result = data.sort()
print(data, result)
>> [1, 2, 3] None

여러개의 데이터를 return 하는 경우

1. 결과 값이 모두 필요할 때 

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)

2. 결과 값중 특정 값만 필요 할 때

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

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

plus, _ = calc(3, 1)
plus

>> 4

docstring

- 함수의 설명을 작성한다 : 함수선언코드 바로 아래 멀티라인 문자열로 작성

- help() 함수로 docstring 출력

def plus(n1, n2):
    '''
    This functuin is to plus two numbers.

    parameters
    ----------
    n1 : int, float : first number
    n2 : int, float : second number

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

*args, **kwargs

1. 파라미터

    - 여러개의 아규먼트 > 하나의 컬렉션 데이터타입(tuple, dict)로 묶어서 받아줌

    - *args : 키워드가 없는 여러개의 아규먼트를 받음 : tuple

    - **kwargs: 키워드가 있는 여러개의 아규먼트를 받음 : dict

def echo(*args, **kwargs):
    print(type(args), args)
    print(type(kwargs), kwargs)

2. 아규먼트

    - 묶여있는 컬렉션 데이터타입(list, tuple, dict) 를 여러개의 아규먼트로 풀어서 함수를 호출

    - *args : list, tuple 데이터타입의 데이터를 여러개의 키워드가 없는 아규먼트로 풀어줌

    - **kwargs : dict 데이터타입의 데이터를 여러개의 키워드가 있는 아규먼트로 풀어줌

data = [1, 2, 3]
echo(data) # echo([1, 2, 3]) > 아규먼트 1개, 데이터타입 : 리스트
echo(*data) # echo(1, 2, 3) > 아규먼트 3개, 데이터타입 : 정수

>> 
<class 'tuple'> ([1, 2, 3],)
<class 'dict'> {}
<class 'tuple'> (1, 2, 3)
<class 'dict'> {}
data = {'num1': 10, 'num2': 20}
echo(data)   # echo({'num1': 10, 'num2': 20}) > 아규먼트 1개, 데이터타입 : 딕셔너리
echo(**data) # echo(num1=10, num2=20) > 키워드 아규먼트 2개, 데이터타입 : 정수

>> 
<class 'tuple'> ({'num1': 10, 'num2': 20},)
<class 'dict'> {}
<class 'tuple'> ()
<class 'dict'> {'num1': 10, 'num2': 20}

scope

- 함수 밖 : 전역영역 : global

- 함수 안 : 지역영역 : local

 

실수하기 쉬운 코드

지역변수는 호출한 함수의 실해이 종료되는 즉시 사라져서 사용할 수 없다!

data = 10

def change():
    data = 20

change()
data

>> 10

global() 

: 지역영역에서 전역영역의 변수를 사용하는 방법

data = 10

def change():
    global data
    data = 20

change()
data

>>20

지역영역에서 사용되는 변수가 지역영역에 없다면 전역영역의 변수를 가져와서 사용한다

data = 10

def change():
    print('local', data)

change()
print('global', data)

>> 
local 10
global 10

return

: 전역영역에서 지역영역의 변수를 사용하는 방법

data = 10

def change():
    data = 20
    return data

data = change()
data 

>> 20

lambda 함수

- 일회성 함수로 간단한 함수(파라미터,리턴)을 함수 선언 없이 사용 가능 > 메모리 절약, 가독성 증대

# 변수 3개 선언 : plus, minus, calc : 저장공간 3칸
def plus(n1, n2):
    return n1 + n2

def minus(n1, n2):
    return n1 - n2

def calc(func, n1, n2):
    return func(n1, n2)
    
calc(plus, 1, 2), calc(minus, 1, 2)
>> (3, -1)

위의 코드를 lambda 함수 이용하여 간단하게 변경

# 저장공간 1칸 사용
def cacl(func, n1, n2):
    return func(n1,n2)
    
calc(lambda n1, n2: n1 + n2, 1, 2), calc(lambda n1, n2: n1 - n2, 1, 2)
>> (3, -1)

list comprehension 

- 간단한 반복문, 조건문 사용해서 리스트 데이터를 만들 때 사용하는 문법

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

# 0 ~ 9 까지의 데이터에서 홀수만 뽑아서 제곱한 결과를 리스트로 출력
result = []
for number in range(10):
    if number % 2:
        result.append(number ** 2)
result
>> [1, 9, 25, 49, 81]

위의 코드를 list comprehension 사용하여 간단하게 변경 

result = [number ** 2 for number in range(10) if number % 2]
result
>> [1, 9, 25, 49, 81]

map()

- literable한 데이터의 모든 value에 특정 함수를 적용한 결과를 리스트로 출력한다.

names1 = ['kim python(23)', 'lee notebook(32)', 'kim macbook(47)']
names2 = ['kim py(33)', 'lee note(52)', 'kim book(87)']

def ages(*args):
    return [data[:-3] + str(int(data[-3:-1]) // 10 * 10) + ')' for data in args]

list(map(ages, names1, names2))
>> [['kim python(20)', 'kim py(30)'],
 ['lee notebook(30)', 'lee note(50)'],
 ['kim macbook(40)', 'kim book(80)']]

'Python' 카테고리의 다른 글

[Python] 기초 문법 - 클래스(1)  (0) 2023.01.05
[Python] 네이버 파파고 번역 API 사용하기  (0) 2023.01.04
[Python] 기초 문법 - 연산자, 조건문, 반복문  (0) 2023.01.03
[Python] 기초 문법 - 변수 선언, 데이터 타입  (0) 2023.01.02
[Python] 다양한 모듈 사용해보기2 : json, googletrans, smtplib (day 3)  (0) 2022.12.23
    'Python' 카테고리의 다른 글
    • [Python] 기초 문법 - 클래스(1)
    • [Python] 네이버 파파고 번역 API 사용하기
    • [Python] 기초 문법 - 연산자, 조건문, 반복문
    • [Python] 기초 문법 - 변수 선언, 데이터 타입
    euny!
    euny!

    티스토리툴바