Hidden features of Python 정리
Updated:
본 내용은 Hidden features of Python을 읽고 필요한 것만 정리한 것이다.
Argument Unpacking
함수 인수를 list 나 tuple의 unpacking (*
), keyword unpacking(**
) 하여 쉽게 전달 할 수 있다.
>>> foo = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>> list(zip(*foo))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> fun = lambda x, y: x + y
>>> fun(*[1, 2])
3
>>> fun(**{'y':2, 'x':1})
3
Braces
Chaining Comparison Operators
Decorators
>>> def print_args(function):
>>> def wrapper(*args, **kwargs):
>>> print 'Arguments:', args, kwargs
>>> return function(*args, **kwargs)
>>> return wrapper
>>> @print_args
>>> def write(text):
>>> print text
>>> write('foo')
Arguments: ('foo',) {}
foo
Default Argument Gotchas
Dangers of Mutable Default arguments
Descriptors
x.y 와 같은 방식으로 member에 접근할 때, python은 먼저 instance dictionary에서 member를 찾는다. instance dictionary에 member가 없으면, 그 다음 class dictionary에서 찾는다. class dictionary에서 그 member를 찾았을 때, 그 member가 descriptor protocol로 작성되어 있으면 그 member를 리턴하는 대신, python은 그 member를 실행한다. descriptor는 __get__
, __set__
, 또는 __delete__
로 작성된 어떤 클래스 이다.
다음은 descriptor를 사용해서 read-only property를 작성하는 예이다.
class Property(object):
def __init__(self, fget):
self.fget = fget
def __get__(self, obj, type):
if obj is None:
return self
return self.fget(obj)
내장함수 property()
처럼 위 Property 클래스를 사용하는 방법
class MyClass(object):
@Property
def foo(self):
return "Foo!"
Descriptor는 properties, bound methods, static methods, class methods 그리고 slots 등을 구현하는데 사용된다. Descriptor HowTo Guide 참고.
Dictionary default .get value
dictionary의 d[key] 방식으로 참조하면 key가 존재하지 않을 때 KeyError가 발생한다. .get
메소드를 사용하면 존재하지 않는 키를 입력하면 None을 리턴한다. 그리고 .get
을 쓰면 default 값을 사용할 수 있다.
>>> d ={}
>>> d.get('a')
>>> d.get('a', 0)
0
>>> d['a']
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
d['a']
KeyError: 'a'
Docstring Tests
(… 계속 진행 중 …)
Leave a comment