1.3 함수 #Writing Idiomatic Python 3.1

oen·2022년 1월 11일
0

1. 함수 인자의 default 값으로 mutable object(가변객체)를 사용하는 것은 피하자

👎

def f(a, L=[]):
    print(f'L: {L}')
    L.append(a)
    return L


print(f(1))
print(f(2))
print(f(3))
L: []
[1]
L: [1]
[1, 2]
L: [1, 2]
[1, 2, 3]

👍

def f(a, L=None):
    print(f'L: {L}')
    if L is None:
        L = []
    L.append(a)
    return L


print(f(1))
print(f(2))
print(f(3))
L: None
[1]
L: None
[2]
L: None
[3]

2. expressions(표현식)의 결과를 리턴할 수 있다

👎

def all_equal(a, b, c):
    result = False
    if a == b == c:
        result = True
    return result


print(all_equal(1, 1, 1))
True

👍

def all_equal(a, b, c):
    return a == b == c


print(all_equal(1, 1, 1))
True

3. keyword arguments 를 적절하게 사용하면 좋다

👎

def python_list(list_value, sep):
    print(sep.join(list_value))


the_list = ['a', 'b', 'c']
python_list(the_list, ' ')
a b c

👍

def python_list(list_value, sep=' '):
    print(sep.join(list_value))


the_list = ['a', 'b', 'c']
python_list(the_list)
a b c

4. *args, **kwargs 사용하기

함수에서 몇 개의 인자를 넘길지 모르겠을 때, 넘길 수 있는 인자 갯수를 유연하게 사용하고 싶을 때 유용하게 사용할 수 있다.

👎

def person(name1=None, name2=None, age=None, mbti=None):
    print(name1, name2, age, mbti)


person('name1')
person('name1', 'name2')

print('---------------------')

person('name1', 'nam2', age=30)
person('name1', 'nam2', age=30, mbti='entj')
name1 None None None
name1 name2 None None
---------------------
name1 nam2 30 None
name1 nam2 30 entj

👍

def person(*names, **kwargs):
    print(names)
    print(kwargs)


person('name1')
person('name1', 'name2')

print('---------------------')

person('name1', 'nam2', age=30)
person('name1', 'nam2', age=30, mbti='entj')
('name1',)
{}
('name1', 'name2')
{}
---------------------
('name1', 'nam2')
{'age': 30}
('name1', 'nam2')
{'age': 30, 'mbti': 'entj'}

5. 함수를 하나의 값처럼 사용하기

파이썬에서는 함수를 포함한 모든 것이 객체이다. 따라서 함수도 변수에 할당이 될 수 있고, 함수에 넘길 수도 있다.

👎

def print_add():
    print(1+2)


def print_sub():
    print(1-2)


def print_mul():
    print(1*2)


print_add()
print_sub()
print_mul()
3
-1
2

👍

import operator as op


def calculate(operator):
    print(operator(1, 2))


calculate(op.add)
calculate(op.sub)
calculate(op.mu)
3
-1
2
profile
🐾

0개의 댓글