Boostcamp AI Tech

[Boostcamp Day-4] Python - Pythonic code

ju_young 2021. 8. 5. 14:34
728x90

split & join

split

split은 string type의 값을 '기준값'으로 나눠서 list형태로 반환해주는 함수이다.

items ='zero one two three'.split()  # 빈칸을 기준으로 문자열 나누기
print(items)
#>>> ['zero','one','two','three']

join

join은 string으로 구성된 list를 합쳐 하나의 string으로 반환해주는 함수이다.

colors =['red','blue','green','yellow']
result =''.join(colors)
print(result)
# >>> 'redbluegreenyellow'

list comprehension

리스트 컴프리헨션은 기존 list를 사용하여 간단히 다른 list를 만드는 기법이다.

result =[iforiinrange(10)ifi%2==0]
print(result)
# >> [0,2,4,6,8]

enumerate & zip

enumerate

enumerate는 list의 element와 index값을 같이 추출해주는 함수이다.

for i, v in enumerate(['tic','tac','toe']):
    print(i, v)
# >>> 0 tic
# >>> 1 tac
# >>> 2 toe

zip

zip은 두 개의 list의 값을 병렬적으로 추출해주는 함수이다.

a = ['a1','a2','a3']
b = ['b1','b2','b3']
for x, y in zip(a, b):
    print(x, y)
 # >>> a1 b1
 # >>> a2 b2
 # >>> a3 b3

lambda & map & reduce

lambda

람다는 함수 이름 없이 함수처럼 쓸 수 있는 익명함수이다.

f = lambda x, y: x + y
print(f(1, 4))
# >> 5

python 3부터 권장하지 않는다고 하는데 여전히 많이 쓰인다고 한다.

https://www.python.org/dev/peps/pep-0008/

map

map은 리스트의 각 요소에 함수를 적용시켜주는 함수이다. 두 개 이상의 list에도 적용이 가능하다.

ex =[1,2,3,4,5]
print(list(map(lambdax: x+x, ex)))

list를 붙여줘야 다시 list로 사용이 가능하다.
이전에 작성한 글 '한 번 쓰고 버려지는 iterator 객체' 도 참고해보면 좋을듯 하다

reduce

map function과 달리 list에 똑같은 함수를 적용해서 통합해주는 함수이다.

from functools import reduce
print(reduce(lambdax, y: x+y, [1, 2, 3, 4, 5]))

lambda나 reduce 함수는 직관성이 떨어져서 python3에서 사용을 권장하지 않는다고 한다.


generator

generator는 iterable object를 특수한 형태로 사용해주는 함수이다. 다음 코드를 보면 'yield'를 사용해 한 번에 하나의 element만을 반환해준다. 다시 말해 element가 사용되는 시점에 값을 메모리에 반환해준다.

def a(v):
    result = []
    for i in range(v):
        yield i

generator도 list처럼 generator comprehension을 사용할 수 있는데 generator expression이라는 이름으로도 부른다고 한다.

gen_ex = (n*n for n in range(500))
print(type(gen_ex))

generator는 읽기 쉬운 장점이 있고 큰 데이터를 처리할 때 고려해볼 수 있다.


passing arguments

함수에 입력되는 arguments의 다양한 형태가 있다.

Keyword arguments

함수에 입력되는 parameter의 변수명을 사용한다.

print_somthing(your_name="TEAMLAB",my_name="Sungchul")

Default arguments

parameter의 기본 값을 사용, 입력하지 않을 경우 기본값 출력

def a(name, your_name='teamlab'):
    print(name, your_name)
a('joo')

asterisk

asterisk는 함수의 parameter가 정해지지 않았고 개수가 정해지지 않은 변수를 넘겨줄 때 사용한다. 즉, 가변인자를 넘길 때 사용한다.

def asterisk_test(a, b, *args):
    return a + b + sum(args)
print(asterisk_test(1,2,3,4,5))

asterisk를 두 개 사용하면 입력값을 dict type으로 사용할 수 있다.

def x(**kwargs):
    print(kwargs)
x(first=3,second=4,third=5)

이외에도 tuple, dict 등 자료형에 들어가 있는 값을 unpacking할 때 사용할 수 있다.

def asterisk_test(a, *args):
    print(a, args)
    print(type(args))
asterisk_test(1, *(2,3,4,5,6))
728x90