목록파이썬 (29)
개발자 블로그

dict 다양한 생성 방법 위 코드를 보면 다양한 방법으로 딕셔너리를 생성할 수 있는 것을 확인할 수 있다. 원래 딕셔너리와 같은 성격의 저장소는 저장 순서를 보장하지 않았지만, 버전 3.7부터 파이썬은 저장순서를 보장하고 있다고 한다. d4의 경우 zip 함수를 사용하여 딕셔너리를 만들었는데, zip함수는 순차적으로 값을 뽑아 튜플 형태로 반환해주는 함수이다. 안에 들어가는 객체(리스트, 문자열, 튜플) iterable 객체가 들어가는 것을 볼 수 있다. 여튼 zip함수는 같은 위치에 있는 값들을 조합해서 튜플을 만들어 낸다. 그리고 셋 이상의 값들을 조합하는 것도 가능하다! 딕셔너리 루핑 테크닉 dict.keys() # 딕셔너리의 키들만 참조하고자 할 때 dict.values() # 딕셔너리의 값들만..

튜플의 패킹과 언패킹 튜플로 값을 묶는 행위를 가리켜 '튜플 패킹'이라 하고 반대로 튜플로 묶여 있는 값들을 풀어내는 행위를 '튜플 언패킹'이라 한다. 튜플 패킹 하나 이상의 값을 튜플로 묶는 행위 튜플 언패킹 튜플에 묶여 있는 값들을 풀어내는 행위 예를 들어 봐보자! 먼저, 튜플의 패킹은 ()로 값들을 묶는 방법이 있고 그냥 소괄호 없이도 패킹이 가능하다! 반대로 언패킹을 진행할 때는 패킹 된 값의 수와 변수의 수를 갖게하여 할당해주면 된다. 그리고 언패킹 과정에서 *을 사용하여 둘 이상의 값을 리스트로 묶어서 하나의 변수에 저장하는 것도 가능!! 이렇듯, 튜플이 아닌 리스트로 묶인다는 사실을 기억하자. 현재는 맨 끝 값만 *을 사용하여 값을 묶었지만 가운데, 맨 앞 상관없이 묶을 수 있다는 것도 기..
'제너레이터'는 Iterator 객체의 한 종류이다! 따라서 next 함수를 호출하면 값을 하나 씩 얻을 수 있다. 제너레이터 객체를 만들기 위한 두 가지 방법 제너레이터 함수(function) 제너레이터를 만들기 위한 함수 정의 제너레이터 표현식(expression) 제너레이터를 만들기 위한 식 제너레이터 함수 제너레이터 함수를 만들기 위해선 꼭 필요한 녀석이 있다! 바로 yeild라는 것인데, 함수에서 return과 비슷한 역할이라고 생각하면 된다. 우리는 함수 내에 yield가 선언되기만 하면 아 이 함수는 제너레이터 함수구나라고 생각하면 되겠다. >>> def gen_num(): print('first num') yield 1 print('second num') yield 2 >>> gen = g..

map & filter map 함수와 filter 함수를 통해 반환되는 객체는 iterator 객체이자 generator 객체이다. 그리고 함수에 들어가는 2번째 인자는 iterable 객체여야한다. 이 특징이 map과 filter 함수의 장점이자 쓰는 이유가 되겠다. 그리고 두 함수의 차이는 첫번째 인자로 들어가는 함수의 리턴 값에 차이가 있다. filter 함수의 경우 첫번째로 들어가는 함수가 True or False를 반환을 하며 '걸러주는 기능'을 한다고 보면 된다. 두 함수가 iterator 객체이자 generator 객체인 이유는 iterable 객체의 값을 순차적으로 함수와 mapping하여 값을 반환하기 때문! generator객체에 대해서는 다음 시간에 더 자세히 알아보도록하자! *아! ..
iter 함수 하나 이상의 값을 저장하거나 꺼내보는 것은 빈번하고 중요한 일이다. 보편적으로 for문을 사용하여 2개 이상의 값들을 꺼내보는 작업을 했는데, 이러한 작업이 중요하기에 상황에 따라 우리는 유연하게 대처할 필요가 있다. 따라서 이번에 소개할 방법은 원하는 시기에 필요에 따라 값을 꺼낼 수 있는 iterator 객체를 설명하고자 한다. >>> ds = [1,2,3,4] >>> ir = iter(ds) >>> next(ir) 1 >>> next(ir) 2 >>> next(ir) 3 >>> next(ir) 4 >>> next(ir) Traceback (most recent call last): File ~~~~~~ next(ir) StopIteration iter 함수 코드 정리를 하면 이런대 ..
두 객체의 비교와 복사 객체를 비교할 때 사용할 수 있는 두 가지 연산자 '==', 'is' 얼핏 보면 같아보이지만, 사실 이 두 가지의 차이를 분명하게 짚고 넘어가야한다. v1 == v2 변수 v1과 v2가 참조하는 객체의 내용이 같은가? v1 is v2 변수 v1과 v2가 참조하는 객체는 동일한 객체인가? 예시를 보며 설명해보자. >>> r1 = [1,2,3] >>> r2 = [1,2,3] >>> r1 is r2 #참조하는 객체가 동일 객체인가? 즉, 메모리 주소가 같니? False >>> r1 == r2 #참조하는 객체의 내용이 같은가? 즉, 두 값의 내용이 일치하니?? True 참조에 대해 앞서 블로깅을 했지만 여기서 간략히 짚고 넘어가자면, 메모리에 저장된 값에 변수명이 적힌 포스트잇을 붙이는 ..
immutable & mutable 객체가 지닌(객체에 저장된) 값이 수정이 불가능한 객체를 'immutable 객체'라고 하며, 반대로 객체가 지닌 값이 수정이 가능하면 'mutable 객체'라고 한다. 여기서 수정이 가능하다는 것은 메모리 주소가 바뀌지 않고 값을 수정할 수 있다는 것이다. 아래 예제 코드를 보며 부연 설명을 해보겠다. ##리스트## >> r = [1, 2, 3] >> id(r) #리스트의 메모리 주소 12345 >> r += [4, 5, 6] >> r >> [1, 2, 3, 4, 5, 6] >> id(r) 12345 #값이 바뀌었지만, 위 주소와 동일한 것을 확인할 수 있다. mutable 객체로는 대표적으로 리스트와 딕셔너리가 있고, immutable 객체로는 대표적으로 튜플, 문..

가비지 컬랙션이란? 레퍼런스 카운트가 0이라는 것은 아무것도 참조하고 있지 않다는 것으로 메모리 내에서 소멸 대상이 된다. 소멸 대상이 되었다고 해서 바로 소멸이 되진 않지만, 시스템에 시간적 여유가 있을 때 소멸시키게 된다. 이러한 일련의 과정들이 '가비지 컬렉션'이라고 한다. 즉, 레퍼런스 카운트가 0인 값은 소멸 대상이 되고, 시스템에 시간적 여유가 있을 때 소멸시키는 일련의 과정이다. 그렇다면 레퍼런스와 레퍼런스 카운트는 무엇인가! 파이썬에서의 변수는 빈상자에 담아둔다라는 개념보다는 '포스트 잇'과 같이 떼었다 붙였다 하는 개념이다. 즉, 참조(레퍼런스)는 이름이 쓰여진(변수명) 포스트잇을 붙인 것이라고 생각하면 된다. 따라서 레퍼런스 카운트는 객체를 참조하는 변수의 수이다. 그러면 가비지 컬랙션..
목차 더보기 Story 01 레퍼런스 카운트와 가비지 컬렉션 [가비지 컬렉션] [파이썬 인터프리터] Story 02 수정 가능한 객체와 수정 불가능한 객체 [immutable & mutable] [성격에 따라 달라지는 함수의 정의] Story 03 깊은 복사와 얕은 복사 [두 객체의 비교와 복사] [깊은 복사] Story 04 리스트 컴프리헨션 [리스트 생성 방법] [조건 필터 추가하기] [리스트 컴프리헨션에 for 한번 더 들어가는 경우] [이중 for 루프에 조건 필터 추가] Story 05 Iterable 객체와 Iterator 객체 [iter 함수] [Iterable 객체와 Iterator 객체의 구분] [스페셜 메소드] [Iterable 객체의 종류와 확인 방법] [for 루프와 Iterable..