본문 바로가기

프로그래머/Python

[널널한 교수의 고급 파이썬] 05-1 파이썬 주석문과 문서화 문자열 05-1 파이썬 주석문과 문서화 문자열 유지보수란? 개발자들이 작성한 코드는 한번 만들고 끝나는 것이 아니며 코드상의 버그가 발견되거나, 인터프리터나 컴파일러의 버전이 업그레이드 될 때, 그리고 기능의 추가가 필요할 때마다 지속적으로 수정되어야 하는데 이러한 작업을 말한다 전체 소프트웨어 개발의 많은 비용과 시간이 유지보수에 사용된다 주석문 유지보수 작업을 위해서는 반드시 주석문이 필요하다 자신이 이전에 만든 코드를 다시 보거나, 전임 개발자가 만든 코드가 어떤 목적으로 만들어졌는가를 후임 개발자들이 빠르게 이해할 수 있다면 유지보수의 시간과 비용이 많이 단축될 것이다 따라서 주석문은 프로그램의 필수적인 요소이다 하지만 잘못된 주석이나 불필요한 주석은 오히려 코드를 이해하는데 방해가 된다 코드를 이해하는.. 더보기
[널널한 교수의 고급 파이썬] 04-4 append()와 +연산을 통한 리바인딩의 성능 비교 04-4 append()와 +연산을 통한 리바인딩의 성능 비교 리스트 요소의 추가 a = [1, 2, 3, 4] # 리스트 객체 생성 a.append(5) # 리스트 객체의 변경(mutating) 리스트의 덧셈 연산과 재할당 a = [1, 2, 3, 4] # 리스트 객체 생성 a = a + [5] # 리스트 객체의 재바인딩(rebinding) # 리스트 자료형은 가변(mutable) # -> 객체의 니용이 바뀌어도 id는 안 바뀜 a = [1, 2, 3, 4] id(a) a.append(5) id(a) # a 객체는 다시 바인딩 된다 a = [1, 2, 3, 4] id(a) id(a[0]) a = a + [5] id(a) id(a[0]) 이것을 알아야 하는 이유 리스트 객체는 변경가능 객체 int형, t.. 더보기
[널널한 교수의 고급 파이썬] 04-3 제너레이터와 yield(feat. return문) 04-3 제너레이터와 yield(feat. return문) 제너레이터 generator 제너레이터 객체는 모든 값을 메모리에 올려두고 이용하는 것이 아니라 필요할 때마다 생성해서 반환하는 일을 한다 이 때문에 메모리를 효율적으로 사용할 수 있다는 장점이 있다 제너레이터와 이를 이용한 for문 my_generator = (x for x in range(1,4)) for n in my_generator: print(n) type(my_generator) 반복자와 동일한 일을 하는 것처럼 보이지만 여기에서 생성된 1, 2, 3을 미리 메모리에 만들어 두는 것이 아니라 for문에서 필요할 때마다 my_generator로 부터 받아오며 메모리에서 보관하지 않는다는 점이다(lazy evaluation) yield .. 더보기
[널널한 교수의 고급 파이썬] 04-2 with 구문과 컨텍스트 매니저 04-2 with 구문과 컨텍스트 매니저 try-except-else-finally 문 try 먼저 try절이 실행되어 예외가 발생하지 않으면 except를 건너 뛰는데, 예외가 발생하면 오류를 확인하며 except의 매칭되는 부분으로 넘겨준다 except try절에서 오류를 발생했을 때 처리할 내용을 담는다 else try절에서 else는 에러가 발생하지 않을 때 실행하게 되는 블럭 finally finally는 예외의 발생 여부와 상관 없이 항상 실행되는 블럭 def divide(x, y): try: result = x / y except ZeroDivisionError: print("0으로 나누는 오류발생") else: # 예외가 발생하지 않을 경우 결과 출력 print("결과: ", result).. 더보기
[널널한 교수의 고급 파이썬] 04-1 Integer Objects(Small Integer Caching) 04-1 Integer Objects(Small Integer Caching) 객체를 생성하는 것? 잦은 객체 생성과 참조 변경은 시스템 수행 속도를 떨어뜨린다 미리 생성해 둔 객체 -5부터 256까지의 정수객체는 미리 생성해 놓고 사용한다 따라서 a = -5일 경우 id(a)와 id(-5)는 항상 동일하다 새로 생성하는 객체 -6과 같은 객체는 필요할 때마다 새롭게 객체를 생성하고 참조 변수가 이를 참조한다 a = -6 id(a) # a가 참조하는 id id(-6) # 새로 객체를 만들어 놓고 id 함수가 참조함 -5에서 256사이의 값을 제외한 변수는 매번 새로 생성되므로 id() 값이 달라짐 더보기
[널널한 교수의 고급 파이썬] 03-3 반복 가능 객체를 위한 내장함수 03-3 반복 가능 객체를 위한 내장함수 반복 가능 객체는 다양한 파이썬 내장함수를 사용할 수 있다 min()이나 max()와 같은 함수는 반복 가능 객체를 인자로 받아 최댓값과 최솟값을 반환한다 이 외에도 all(), any(), ascii(), bool(), filter(), iter()와 같은 고급 내장함수도 제공되고 있다 all() 함수 반복 가능한 항목들이 모두 참일 때만, 참을 반환한다 l1 = [1, 2, 3, 4] l2 = [0, 2, 4, 8] l3 = [0, 0, 0, 0] all(l1) # True all(l2) # False all(l3) # False any() 함수 임의의 반복 가능한 항목들 중에서 참이 하나라도 있을 경우 참을 반환한다 l1 = [1, 2, 3, 4] l2 = .. 더보기
[널널한 교수의 고급 파이썬] 03-2 반복자 객체 생성 03-2 반복자 객체 생성 반복자를 만들기 위해서는 반드시 iter()와 next() 메소드를 그 멤버로 가져야 한다 이 때, iter() 메소드는 반복자 객체 자신(self라는 키워드로 정의 됨)을 반환하여야 하며, next() 메소드는 루프가 돌 때마다 지정된 값을 반환하는 일을 한다 홀수 값을 반환하는 반복자 객체 class OddCounter: def __init__(self, n = 1): self.n = n def __iter__(self): return self def __next__(self): t = self.n self.n += 2 return t my_counter = OddCounter() print(next(my_counter)) # 1 print(my_counter__next__.. 더보기
[널널한 교수의 고급 파이썬] 03-1 반복 가능 자료형과 반복자 03-1 반복 가능 자료형과 반복자 반복자란? 하나 이상의 항목이 포함되어 있는 자료구조에서 데이터를 순차적으로 꺼내어 이용할 수 있는 객체 데이터를 순차적으로 꺼낼 때에는 next()라는 함수나 이 객체의 next()라는 특수 메소드를 사용해야 한다 파이썬의 반복자는 이렇게 next()라는 메소드를 가지고 차례차례로 다음 항목의 요소를 반환할 수 있다 반복 가능 객체 : 리스트, 튜플, range형 반복 가능 객체 -> iter() 함수 -> 반복자 객체(iterator) -> next() 함수 / StopIteration 반복가능(iterable) 자료형 반복자 자료형과 유사한 자료형 반복가능 자료형으로는 리스트, 딕셔너리, 튜플, 문자열, 집합, 파일, range가 있다 반복가능 자료형은 파이썬 내.. 더보기
[널널한 교수의 고급 파이썬] 02-3 집합과 튜플 축약 02-3 집합과 튜플 축약 곱집합 각 집합에서 임의의 원소를 가져와 만들 수 있는 조합을 하나의 튜플로 표현 def product_set(set1, set2): res = set() for i in set1: for j in set2: res = res | {(i, j)} # res.add((i,j)) return res A = {1, 3} B = {2, 4} AxB = product_st(A, B) print(A) print(B) print(AxB) 축약표현으로 구한 곱집합 def product_set(set1, set2): return {(i, j) for i in set1 for j in set2} A = {1, 3} B = {2, 4} AxB = product_st(A, B) print(A) pr.. 더보기
[널널한 교수의 고급 파이썬] 02-1, 02-2 리스트 축약 표현 02-1, 02-2 리스트 축약 표현 리스트 축약 반복 가능 객체를 이용하여 쉽게 리스트를 생성할 수 있는 기능 map, filter 기능 구현 가능 람다식의 본체가 될 식을 그대로 사용하기 때문에 따로 람다함수를 정의할 필요가 없다 리스트 뿐만 아니라 집합과 같은 반복가능한 모든 객체에 대해 적용할 수 있다 리스트 축약의 문법 [{표현식} for {변수} in {반복자/연속열} if {조건표현식}] 예제 [x for x in range(10)] [x ** 2 for x in range(10)] a = [1, 2, 3, 4, 5, 6, 7] # 맵과 람다 함수를 이용한 리스트의 제곱 구하기 a = list(map(lambda x : x**2, a)) print(a) # 리스트 축약 표현식을 이용한 리스트.. 더보기