파이썬/파이썬 기초
[python] 반복자(iterator)와 제너레이터(generator)
반복자(iterator)를 사용하는 이유 파이썬을 사용하다보면 어느 순간 심심치 않게 iter() 또는 next() 등을 목격했으리라 생각한다. 아마 파이썬으로 처음 프로그래밍을 공부했다면 (필자와 같은 비전공자) "결국에는 for문을 활용해서 사용하는 거 같은데.. 쉽게 그냥 list에 담아두고 사용하면 되지 왜 번거롭게 iterator를 만들 당최 왜 사용할까?" 라는 생각이 들 수도 있다. iterator를 사용하는데 여러 이유가 있겠지만, 기본적으로 시간과 비용 측면에서 매우 효율적이기 때문이다. 가장 직관적인 예제는 빅데이터를 활용한 딥러닝 모델을 구현할 때인데, 예를 들면 데이터 100만개를 학습한다고 가정해보자. 100만개를 시작부터 불러놓고 학습을 하는 것과 iterator가 필요한 데이터..
[python] finally 블록 - 파이썬의 자원정리 방법
파이썬으로 작업하다보면 예외 처리시, finally 블록을 사용하는 것을 곧잘 목격할 수 있습니다. finally는 언제 사용하는 것일까요? 이 finally 블록은 예외 발생 여부와 상관없이 반드시 실행해야 할 명령을 지정합니다. 이해를 돕기 위해 예를 들어보겠습니다. 어떠한 데이터 분석과제를 위해 모든 gpu자원을 하나의 계정(user A)으로 할당해주었습니다. 그렇다면 동일한 서버 내 다른 유저(user B)는 사용중인 gpu에 접근할 수 없을 것입니다. 이때 만약에 user A가 딥러닝을 돌려놓고 밥먹으러 나갔다면, 또는 외출했다고 가정해보겠습니다. user B는 gpu를 활용해야 하지만, user A가 사용하고 있어서 활용하지 못하게 됩니다. 하지만 user A의 딥러닝 코드가 에러가 났다면, ..
[python] is 연산자란?
파이썬에서 is 연산자는 두 변수가 같은 객체를 가리키고 있는지 확인할 때 is 구문을 사용한다. 그렇다면 is 연산자와 같음을 나타내는 == 연산자의 차이점은 무엇일까? 아래 코드를 통해 이해해보자. # 3개의 리스트 생성 list1 = [1, 2, 3] # 리스트 할당 list2 = list1 # 리스트1을 대입 받는 방식으로 리스트2 생성 list3 = list1.copy() # 리스트1의 사본을 리스트3의 값으로 할당 print('list1 과 list2는 같은 객체를 가리키고 있나요? : ', list1 is list2) print('list1 과 list3은 같은 객체를 가리키고 있나요? : ', list1 is list3) print('list2 와 list3은 같은 객체를 가리키고 있나요?..
[python] 키워드 가변 인수 (keyword variable arguments)
(본 포스팅은 김상형 저자의 '파이썬 정복' 책을 참조했습니다) 파이썬을 활용하다보면 함수를 정의하거나 불러올 때 **kwargs 또는 **args와 같은 것을 곧잘 목격하셨을 거라고 생각합니다. 이 친구들은 키워드 가변 인수(keyword arguments kwargs 등으로 표기됨)를 의미하는데요. 호출원에서 여러 개의 키워드 인수를 전달하면, 인수의 이름과 값을 쌍으로 사전으로 만들어서 전달합니다. 함수 내부에서는 사전을 읽듯이 인수값을 꺼내 사용합니다. 아래 간단한 활용 예제를 살펴보겠습니다. # keyword variable argument 활용 예제 def calcstep(**args): begin = args['begin'] end = args['end'] step = args['step']..
[python] 함수 - 가변 인수
파이썬 인수에 대해 알아보겠습니다. 파이썬을 활용하다 보면, 아래와 같은 함수 방식으로 인자를 주는 것을 종종 보셨을 겁니다. # 1번 케이스 def function(*args): ...(이하 코드 생략)... # 2번 케이스 def function2(**kwargs): ...(이하 코드 생략)... 이렇게 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있습니다. 이것을 '가변 인수'라고 지칭합니다. 가변 인수의 특징은 정해진 개수만큼의 실인수를 전달해야할 필요가 없습니다. 가변 인수는 임의 개수의 인수를 받는 다는 것이 특징입니다. 아래 예를 통해 확인해보겠습니다. def intsum(*ints): sum = 0 for num in ints: sum += num return s..