Python 기초 - 함수

런던행·2020년 6월 3일
0

Python 기초

목록 보기
7/11

위치 인자

  • 위치인자(positional arguments)는 인자의 가장 익숙한 타입이다. 값을 순서대로 매개변수에 복사한다.

    menu(1, 2)

키워드 인자

  • 매개변수에 상응하는 이름을 인자에 지정할 수 있다.

     menu(a='aa', b='cc')

위치 인자 모으기: *

  • 함수의 매개변수에 애스터리스크를 사용할 때, 애스터리스크는 매개변수에서 위치 인자 변수들을 튜플로 묶는다

    >>> def print_args(*args):
    ...     print(args)
    ... 
    >>> print_args(1, 2, 3)
    (1, 2, 3)

키워드 인자 모으기: **

  • 키워드 인자를 딕셔너리로 묶기

    >>> def print_kwargs(**kwargs):
    ...     print(kwargs)
    ... 
    >>> print_kwargs(a=1, b=2)
    {'a': 1, 'b': 2}

응용

   >>> def print_args(*args, **kwargs):
    ...     print(args)
    ...     print(kwargs)
    ... 
    >>> print_args(1, 2, 3, a=1, b=2)
    (1, 2, 3)
    {'a': 1, 'b': 2}

익명 함수: lambda()

>>> def edit_story(words, func):
...     for word in words:
...             print(func(word))
... 
>>> def enliven(word):
...     return word.capitalize() + '!'
... 
>>> edit_story(['aaa', 'bbb', 'ccc'], enliven)
Aaa!
Bbb!
Ccc!
>>> edit_story(['aaa', 'bbb', 'ccc'], lambda word: word.capitalize() + '!')
Aaa!
Bbb!
Ccc!

제너레이터

  • 제너레이터는 파이썬의 시퀀스를 생성하는 객체다. 제너레이터로, 전체 시퀀스를 한 번에 메모리에 생성하고 정렬할 필요 없이, 잠재적으로 아주 큰 시퀀스를 순회 할 수 있다. 제너레이터를 순회할 때마다 마지막으로 호출된 항목을 기억하고 다음 값을 반환한다.
>>> def my_range(first=0, last=10, step=1):
...     number = first
...     while number < last:
...             yield number
...             number += step
... 
>>> my_range
<function my_range at 0x1066348c8>
>>> 
>>> for x in my_range(1, 3):
...     print(x)
... 
1
2

데커레이터

  • 데커레이터(decorator)는 하나의 함수를 취해서 또 다른 함수를 반환하는 함수이다.
def document_it(func):
  def new_function1(*args, **kwargs):
    print(args)
    return func(*args, **kwargs)
  return new_function1

def show_name(func):
  def new_function2(*args, **kwargs):
    print(func.__name__)
    return func(*args, **kwargs)
  return new_function2

@document_it
@show_name
def add_ints(a, b):
  print("call add_ints")
  return a + b

r = add_ints(1, 5)
print(f"{r}")


def new_add_ints(a, b):
  print("call add_ints")
  return a + b

print("----------")
deco_show = show_name(new_add_ints)
r = deco_show(1, 5)
print(f"{r}")
print("----------")
deco_document = document_it(deco_show)
r = deco_document(1, 5)
print(f"{r}")
  (1, 5)
  add_ints
  call add_ints
  6
  ----------
  new_add_ints
  call add_ints
  6
  ----------
  (1, 5)
  new_add_ints
  call add_ints
  6

이름에 _와 __사용

  • 두 언더스코어(__)로 시작하고 끝나는 이름은 파이썬 내의 사용을 위해 예약되어 있다.
profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글