본문 바로가기

PYTHON/Basic

function

함수

기본함수

함수명 (파라미터2, 파라미터2, ...)

  • 반복되는 코드를 묶음으로 효율적으로 코드를 작성

  • def : 함수 선언

  • return

    • 결과 반환 값 지정
    • 함수의 종료 명시
    • return만 존재하면 None 반환
    • mutiple return 가능
  • parameter

    • 함수에 전달되는 입력(input)
    • default parameter : 기본 인자
    • 가장 뒤에 선언
  • argument

    • 함수에 입력으로 전달하는 값

    • 함수에 파라미터 개수가 불특정할 때 사용 가능

    • *args

      • 함수 호출시 여러개의 데이터를 한꺼번에 받아올 때 사용
      • 파라미터를 튜플 형태로 전달
    • **kwargs

      • 함수 호출시 여러개의 키워드 데이터를 받아올 떄 사용
      • 파라미터를 딕셔너리 형태로 전달

Docstring

  • 함수에 대한 설명

    • <함수명>?
    • <함수명>??
    • help(함수명)
    • print(함수명.doc)
    • dir(함수명)
def echo(msg):
    "inpur docstring here !"
    return msg

Scope

  • global variable : 전역변수

    • 가장 상단에서 정의되어 프로그램 종료 전까지 유지
    • 상수(변수명 대문자 표기)를 주로 선언해서 사용
  • local variable: 지역변수

    • 특정 코드 블록에서 선언된 변수
    • 같은 이름의 경우 전역변수보다 우선순위 높음

Inner Function

  • 함수 안에서 선언된 함수
  • 자원을 효율적으로 사용
  • 지역함수

Lambda Function

  • 단일문으로 표현되는 익명함수
  • 파라미터를 받아 바로 리턴하는 함수를 줄여서 작성
  • 리소스를 적게 사용 (1회성)
def test(func, *args, **kwargs):
    print(args)
    print(kwargs)

test(lambda x: x**2, 1, 2, 3, who="Robert", what="IronMan")
(1, 2, 3)
{'who': 'Robert', 'what': 'IronMan'}

Map, Reduce, Filter

  • map : 리스트 데이터의 각 요소에 함수를 실행하고 나온 결과를 새로운 리스트로 반환
  • filter : 특정 조건을 만족시키는 요소만 남기는 함수
  • reduce : 차례대로 앞 2개의 원소 연산 결과가 다음 연산의 입력으로 진행되어 최종 출력이 한개
names = ["Kim python", "lee summer", "Park soojin", "Kim data", "Lee campus", "HONG Lahong"]

# Q1. map을 이용하여 name의 성만 출력
result1 = list(map(lambda name : 
            name.split(" ")[0].upper()[0] + name.split(" ")[0].lower[1:], names))


# Q2. filter 이용해서 성이 Kim인 사람의 이름만 결과로 출력
family_name = "Kim"
result2 = list(filter(lambda name : 
            name.split(" ")[0] == family_name, names))


# Q3. reduce를 이용하여 사람 이름의 길이가 가장 긴사람 1명을 출력
from functools import reduce
result3 = reduce(lambda name1, name2 : 
            name1 if len(name1) > len(name2) else name2, names)
result1 = ['Kim', 'Lee', 'Park', 'Kim', 'Lee', 'Hong']
result2 = ['Kim python', 'Kim data']
result3 = 'HONG Lahong'

Decorator

  • 코드를 바꾸지 않고 함수의 기능 추가 및 수정 가능
  • 함수에서 공통된 코드 부분을 따로 묶어 관리할 수 있는 장점
  • 지역함수와 *args, **kwargs 구현

Q. 데코레이터 함수를 이용해서 함수에 아이디를 입력하면 아이디가 저장되어 있으면 패스워드를 알려주는 코드를 작성하세요.

admin_ls = ["IronMan", "Thor"]
pw = "Avengers"


def admin(func):
    def wrapper(*args, **kwargs):
        is_admin = False
        result = func(*args, **kwargs)
        if result in admin_ls:
            print("allow permission!")
            print("Pw: ", pw)
            is_admin = True
        else:
            print("Not admin!")
        return is_admin
    return wrapper


@admin
def input_id():
    return input("Insert ID: ")

# input_id()= "Lahong"
Insert ID: Lahong
Not admin!
False

# input_id()= "IronMan"
Insert ID: IronMan
allow permission!
Pw:  Avengers
True

'PYTHON > Basic' 카테고리의 다른 글

operating system  (0) 2019.12.28
module  (0) 2019.12.28
loops  (0) 2019.12.28
conditions  (0) 2019.12.28
operators  (0) 2019.12.28