Python 54

[VSCODE] Prettier - Code formatter 설정

Prettier - Code formatter - Visual Studio Marketplace python 코드를 작성하다보면 Shift + Alt + F 를 눌러 코드를 정렬해가며 코드를 작성한다. Prettier 가 해당 정렬을 도와주는 extension 이다. Prettier 의 설정 1) Extension Tab 에서 Prettier - Code Formatter 를 설치한다. 2) Ctrl + , 혹은 File > Preferences > Settings 를 선택해 설정에 진입한다. 설정 중 formatter 를 입력해 Editor: Default Formatter 를 찾아 Prettier - Code formatter를 선택한다. 다른 항목은 별다르게 수정할 필요가 없었지만 한라인 문자열 수..

[VSCODE] Google Python Style Guide 적용

styleguide | Style guides for Google-originated open-source projects 여러 명이 협업을 하다보면 가독성을 높히기 위해 같은 Coding Style 을 가지고 코드를 만들게 된다. python 관련하여 Google 에서 사용하는 Python Coding Style Guide 가 있어 VSCODE 와 연동해 보았다. Lint 설정 이후 아래 pylintrc 파일을 다운로드 받아 사용하는 workspace 바로 아래에 넣는다. https://google.github.io/styleguide/pylintrc 위 pylintrc 에 따라 pylintrc 에 따라 경고가 정상적으로 나오는 것을 확인하였고, 코드를 수정하였다. Apply pylint accordi..

Python - reduce(), 인자를 누적적으로 적용하여 결과를 반환

reduce >>> functools.reduce(function, iterable[, initializer]) iterable 한 data를 왼쪽에서 오른쪽으로 누적적으로 fuction 의 인자로 넣어 하나의 결과를 반환하는 함수 python2 에서는 builtin 함수로 바로 사용할 수 있었지만 python3 에서는 functools 모듈의 함수로 포함되어 있다. [Link : iterable 과 iterator, 그리고 반복문] functools.reduce(function, iterable[, initializer]) Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to r..

Language/Python 2020.02.23

Python - filter(), iterable 변수 내 값 중 조건에 맞는 값만 반환

filter >>> filter(function, iterable) iterable 한 data를 function 의 인자로 넣어 False 가 아닌 결과를 반환하는 인자들만 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] filter(function, iterable) Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity fu..

Language/Python 2020.02.22

Python - map(), 함수와 iterable 변수를 인자로 받아 iterator 결과를 반환

map >>> map(func, *iterables) iterable 한 data를 func 의 인자로 넣어 나온 결과들을 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] map(function, iterable, ...) Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With ..

Language/Python 2020.02.19

일급 객체 (first-class object)

일급 객체 (first-class object) 는 아래와 같이 불리기도 한다. first-class citizen first-class type first-class entity first-class value 일급 객체의 특징 함수의 인자로 전달 가능 함수의 결과로 반환 가능 Python 에서는 정수, 문자열, list 등과 더불어 함수 또한 일급 객체이다. 이에 따라 아래와 같이 하나의 함수를 다른 함수의 인자로 넘겨줄 수 있다. >>> def reverse(data): ... return data[::-1] ... >>> data = ['zbc', 'tde', 'dcd', 'xfg'] >>> sorted(data, key=reverse) ['zbc', 'dcd', 'tde', 'xfg'] 할당문의..

Language 2020.02.17

Python - iterable 과 iterator, 그리고 반복문

iterable 의 정의 및 이해 iterator 의 정의 및 이해 iterable 의 정의 및 이해 iterable : 한 번에 하나의 member를 반환할 수 있는 object (객체)를 의미. iterator 로 변환이 가능. list, str, tuple 와 같은 모든 Sequence type dict, file object 혹은 sequence semantic 을 가진 __iter__() method 나 __getitem__() method 가 구현된 object iterable 은 for loop 나 sequence 가 필요한 zip(), map() 등에 사용될 수 있다. 일반적으로 iterator 로 변환 후 사용된다. iter() 를 이용해 해당 object의 iterator를 생성하여 사..

Language/Python 2020.01.02

Python - Sequence Type을 Slice 하기

Python 은 데이터에 순서를 붙여 나열한 Sequence Type 으로 리스트(list), 튜플(tuple), 범위(range), 문자열(string) 등 여러 가지 형태를 제공한다. Python 은 이렇게 나열된 데이터들을 쪼갤(Slice) 수 있는데, ":" 을 slice notation 으로 하여 아래와 같은 기능을 제공하고 있다. Python Sequence Type 의 Slice Notation 기본 문법 variable[start:stop:step] [slice() 함수를 이용한 sequence type 변수 나누기] start, stop 의 값이 양수 일 경우 인덱스 처음을 기준으로 시작하고, 음수 일 경우 인덱스 끝을 기준으로 시작한다. step 의 양수/음수에 따라 결과의 방향이 바뀌..

Language/Python 2019.11.25

Python - with, context manager에 대한 이해.

특정 구문을 시작 전후 반드시 실행해야 하는 구문이 있다면 Python에서는 어떻게 구현할 것인가. 일반적인 코드로 구현하자면 다음과 같다. print("->> Before routine") routine1() print(" Before routine") routine2() print(" Before routine") routine3() print("> Before routine") try: routine1() finally: print(" Before routine") try: routine2() finally: print(" Before routine") try: routine3() finally: print("> Before routine") def __exit__(self, type, value,..

Language/Python 2019.11.16

Python - 지능형 리스트 (List Comprehension)/제너레이터 표현식 (Generator expression) 의 이해 및 비교

지능형 리스트 (List Comprehension) : Python 에서는 리스트 구성을 위해 항목을 하나하나 나열하는 방식외에 구문을 통해 sequence 형태의 데이터를 가공하여 리스트를 구성하는 방법을 제공하고 있다. 지능형 리스트를 사용하게 되면 코드가 간결해지고 상황에 따라서는 성능이 좋은 코드를 작성할 수 있다. 제너레이터 표현식 (Generator expression) : 지능형 리스트 (List Comprehension) 과 유사하지만 별도의 리스트는 생성하지 않고, iterator 를 생성하여 항목을 하나씩 처리할 수 있도록 한다. 지능형 리스트를 만든 후 하나씩 항목을 처리하여도 되지만 별도의 메모리 공간을 차지하지 않는다는 차이점이 있다. 지능형 리스트의 경우 대괄호 [] 를 사용하는..

Language/Python 2019.09.13

Python - random(), 임의의 수(난수)를 구하는 함수

가장 흔히 사용되는 기능으로 random 값을 생성하는 random() 함수가 있다. 해당 함수를 사용하기 위해서는 별도의 random module을 import 하여 사용해야 한다. 직접 난수를 구하는 로직을 작성해 본 사람을 알겠지만 규칙이 없는 난수를 생성하기는 쉽지가 않다. 질 좋은 난수 생성기더라도 경우의 수를 늘려 생성하다 보면 어느 순간 규칙을 가지는 것을 확인하는 경우가 다수이기 때문이다. 이를 극복하기 위해 난수 생성하는 로직이 제안되고 존재하는데 Python 에서는 Mersenne Twister 라는 난수 생성기를 사용한다. 하지만 이 난수 생성 로직도 특정 상황에서 다음 난수를 예측할 수 있기 때문에 암호 관련 목적으로 random 모듈로 부터 생성된 난수 사용은 권장하지 않고 있다...

Language/Python 2019.03.20

Python - id(), object의 unique 값(memory address)를 보여주는 함수

Python은 C 언어와 달리 포인터라는 개념이 없다. 하지만 컴퓨터 상에서 돌아가는 언어이기 때문에 내부적으로는 메모리를 사용하고, 이에 대한 주소 정보를 가지고 있다. 그렇다면 포인터 개념을 사용하지 않는 Python에서 해당 메모리 주소는 어떤 용도로 사용되는 것일까? Python은 메모리 주소를 변수를 구별하기 위한 용도로 사용하고 있다. python의 built-in 함수 중 id() 를 이용하면 현재 확인하고자 하는 변수의 메모리 주소를 확인할 수 있다. (CPython의 경우 메모리 주소를 반환하지만, 다른 파이썬 인터프리터는 메모리 주소 이외의 다른 값을 반환할 수 있음) id(object)Return the “identity” of an object. This is an integer w..

Language/Python 2019.03.18

Python - if __name__ == __main__ 의 의미

[Python 스크립트 파일의 실행] python은 C언어나 Java 와 달리 main() 함수가 존재하지 않는다.이에 따라 스크립트 파일을 실행하게 되면 들여쓰기가 되지 않은 line들을 파일 상단 부터 순차적으로 읽어 수행하게 된다. [sample.py]a = 1b = 3c = a + b print(c) def temp(): print("abc") ~/python$ python sample.py4 위에서 보듯이 들여쓰여진 코드인 함수 부분은 수행되지 않았음을 볼 수 있다. [다른 Python 스크립트 파일을 모듈로서 실행] python 스크립트 파일은 또 다른 python 스크립트 파일을 하나의 모듈로써 읽어 들일 수 있다. [sample_call.py]import sample ~/python$ py..

Language/Python 2019.02.08

Python - package와 module의 차이

Python에 있어 module은 하나의 python 코드 파일을 의미한다. 파일 이름 자체가 module을 나타내는 이름이다. 반면 package는 module을 모아 놓은 directory 구조하고 할 수 있다. module 과 package 사용의 예> import ModuleName import PackageNamefrom PackageName import ModuleName import를 하게 되면 해당 ModuleName 혹은 PackageName 이 Loading 상태인지 확인 후 Loading이 되지 않은 상태라면 다음의 위치에서 존재를 확인한다. 1) sys.path 에 선언된 위치2) 현재 실행 위치 Ubuntu 14.04 python 2.7에서 sys.path를 확인해 보면 다음과 같..

Language/Python 2018.06.16

Python - datetime/time module, 현재 시간 출력 방법

datetime 혹은 time module 중 하나를 이용하여 현재 시간을 표시할 수 있다. 먼저 datetime 을 이용한 현재 시간 표현은 다음과 같다. import datetime now = datetime.datetime.now() print now 결과> $ python now_datetime.py 2018-06-05 10:30:06.986065 반면 time module을 이용하면 좀 더 세분화/정교화하여 표시할 수 있다. import time now = time.localtime() print "%04d/%02d/%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) 결과..

Language/Python 2018.06.16

Python - email package, raw email message 다루기

poplib 를 이용해 raw email message를 받아오더라도 MIME (Multipurpose Internet Mail Extensions, 전자 우편을 위한 인터넷 표준 포맷)이기 때문에 막상 출력해 보면 알아보기 힘든 문자열들로 표현되어 있다. 이에 따라 원하는 값을 추출하기 위해 추가적인 코드를 작성하여야 한다. MIME 형식의 raw email message를 parsing 하기 위해서는 python의 email package를 사용하면 된다. poplib의 M.retr()[1] 을 통해 구한 raw email string은 아래의 코드를 통해 하나의 string으로 표현이 가능하다. raw_email = b"\n".join(M.retr(mList+1)[1]) 이렇게 구해진 raw_ema..

Language/Python 2018.06.15

Python - poplib, POP3 를 통한 이메일 수신

이메일을 웹 Interface가 아닌 별도의 프로그램을 통해 수신하기 위해서는 POP3 혹은 IMAP 을 사용하여야 한다. 가볍게는 POP3가 많이 사용되고, 좀 더 구체적인 기능을 위해서는 IMAP을 사용하면 된다. python에서 POP3을 사용해 이메일 수신하는 방법 python2 : https://docs.python.org/2/library/poplib.html python3 : https://docs.python.org/3/library/poplib.html python2나 python3나 POP3를 위한 python library - poplib 를 가지고 있다. 간단하게 네이버 메일에서 POP3를 통해 이메일을 수신하는 코드를 살펴보자. import getpass, poplib M = po..

Language/Python 2018.06.15

Python - divmod(), 두 숫자를 나누어 몫과 나머지를 tuple로 반환하는 함수

divmod >>> divmod(x, y) 두 숫자를 인자로 전달 받아 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환한다. __builtin__ module에 포함된 function 이다. argument x - 복소수(complex)가 아닌 숫자.y - 복소수(complex)가 아닌 숫자. return value 몫과 나머지를 tuple로 반환한다. example 모든 인자가 양의 정수일 경우) >>> divmod(4,2) (2, 0) >>> divmod(8,3) (2, 2) 인자 중 음의 정수가 있을 경우) >>> divmod(10,-3) (-4, -2) >>> divmod(-10,-3) (3, -1) >>> divmod(-10,3) (-4, 2) 인자 중 실수가 있을 경우..

Language/Python 2018.01.13

Python - callable(), 호출 가능한 object 여부를 판단하는 함수

callable >>> callable(object) 전달받은 object 인자가 호출 가능한지 여부를 판단한다. __builtin__ module에 포함된 function 이다. argument object - 호출 가능 여부를 판단할 object 인자 하나를 넘겨준다. return value 인자로 전달받은 object가 호출 가능한 object일 경우 True, 아닐 경우 False를 반환한다. example 호출 불가능한 변수형 object 와 호출 가능한 함수형 object 의 예) >>> sample = 1 >>> callable(sample) False >>> def funcSample(): ... print('sample') ... >>> sample = funcSample >>> call..

Language/Python 2018.01.12

Python - dir(), object의 속성(attribute) 목록을 보여주는 함수

dir >>> dir([object]) 전달받은 object 인자의 속성 목록(attribute list)를 보여준다. 만약 아무런 인자가 전달되지 않았다면 현재 local scope내 사용 가능한 모듈(module) 혹은 object 목록이 표시된다. __builtin__ module에 포함된 function 이다. argument object (optional) - dir() 함수는 object가 가지는 모든 속성(attribute)들을 반환한다. return value 인자로 전달받은 object의 유효한 속성들의 목록을 반환한다. example dir() 함수 사용시 argument가 없는 경우) >>> dir() ['__builtins__', '__doc__', '__name__', '__pac..

Language/Python 2018.01.12

Python - int(), 정수(integer)를 반환하는 클래스

int >>> int(x=0)>>> int(x, base=10) 전달한 숫자 혹은 문자열, x를 기반으로 정수 값을 돌려준다.만약 인자가 없다면 기본 값 0을 돌려준다. 인자가 숫자일 경우, plain integer, long integer, floating point number가 입력될 수 있다. plain integer의 경우 int 형으로 반환하고, long integer의 경우 long 형으로 반환한다. (참고> plain integer와 long integer 범위)반면 floating point number의 경우는 소수점 이하는 버리고 int 혹은 long 형으로 반환한다. 인자가 앞서 언급한 숫자형이 아니거나 base(진법) 인자가 같이 넘어올 경우 문자열이나 unicode object가..

Language/Python 2018.01.04

Python - slice(), slicing하기 원하는 index를 정의하는 클래스

slice >>> slice(stop) >>> slice(start, stop[, step]) 잘라내기 원하는 index 들을 정의하는 클래스이다. slice object에 대해 한마디로 표현하기가 쉽지 않다. 원활한 이해를 위해 예를 들면 다음과 같다. 먼저, sample = "abcdefghijklmn" 이라는 문자열이 있다고 하자. 이 중 sample[2] 부터 sample[5] 전 까지의 문자열만 빼내고 싶다면 어떻게 하면 될까? (즉, index 2부터 4까지 표시한다.) >>> sample = "abcdefghijklmn" >>> sample[2:5] 'cde' 위와 같이 colon (:) 을 이용하여 추출해 내면 된다. [Slice Notation ":" 을 이용한 나누기] >>> a = "..

Language/Python 2018.01.04

Python - xrange(), 순차적인 숫자를 만들 수 있는 generator를 생성하는 클래스

xrange >>> xrange(stop) >>> xrange(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 만들 수 있는 generator를 생성한다. 기본적인 사용법은 [range 함수] 와 동일하다. 하지만 range 함수는 미리 숫자를 생성하여 list 형태로 메모리에 미리 올려 놓는 반면 xrange 함수는 실제로 사용을 요청받았을 때 숫자를 생성한다. range 함수와는 다르게 불필요하게 메모리에 생성하지 않는다는 장점이 있다. xrange 함수가 리턴하는 형태는 xrange type이다. xrange type은 immutable sequence 로 일반적으로 반복문에 사용된다. xrange type의 장점은 range와는 상관없이 xrange object 자체..

Language/Python 2018.01.03

Python - range(), 순차적인 숫자를 가지는 list를 생성하는 함수

range >>> range(stop) >>> range(start, stop[, step]) 전달받은 인자를 바탕으로 순차적인 숫자를 가지는 list를 생성한다. 인자는 plain integer형 이어야 한다. 인자 중 stop은 반드시 입력되어야 하는 반면, start는 생략되면 기본값으로 0, step은 생략되면 기본값으로 1이 주어진다. 순차적인 숫자가 다음과 같은 규칙으로 생성된다. [start, start + step, start + 2 * step, start + 3 * step, ...] step 이 양수이면 start + i * step 이 stop 보다 작을 때까지,step 이 음수이면 start + i * step 이 stop 보다 클 때까지 생성된다. step은 0이면 안된다. __..

Language/Python 2018.01.03

Python - float(), 실수(float)를 반환하는 클래스

float >>> float(x) 전달한 숫자 혹은 문자열, x를 기반으로 실수 값을 돌려준다. 문자열을 argument로 넘겨줄 경우 해당 문자열은 부호가 있는 정수나 실수여야 한다. ([+|-]nan 또는 [+|-]inf eh argument가 될 수 있다.) 문자열이 아니라면 integer, long integer 또는 float 형의 숫자가 전달되어야 한다. 만약 argument가 전달되지 않는다면 0.0을 반환한다. __builtin__ module에 포함된 class 이다. 예제) 인자로 숫자를 의미하는 문자열이 전달되었을 경우 >>> float("1.2") 1.2 >>> float("-3") -3.0 인자로 [+|-]nan 또는 [+|-]inf 가 전달되었을 경우 >>> float('nan'..

Language/Python 2018.01.02

Python - hasattr(), object의 속성(attribute) 존재를 확인하는 함수

hasattr >>> hasattr(object, name) object의 속성(attribute) 존재를 확인한다. 만약 argument로 넘겨준 object 에 name 의 속성이 존재하면 True, 아니면 False를 반환한다. 내부적으로 getattr(object, name)을 이용하는데 해당 함수 수행시 exception이 발생하는지 하지 않는지를 통해 판단한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 해당 ob..

Language/Python 2018.01.02

Python - delattr(), object의 속성(attribute)을 제거하는 함수

delattr >>> delattr(object, name) object에 존재하는 속성을 제거한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 delattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성을 제거하는 경우 >>> delattr(c, 'x') >>> getattr(c, 'x') Traceback (most recent call last): File "", line 1, in AttributeError: sample instance has no attribute..

Language/Python 2018.01.02

Python - getattr(), object의 속성(attribute) 값을 확인하는 함수

getattr >>> getattr(object, name[, default]) object에 존재하는 속성의 값을 가져온다. __builtin__ module에 포함된 function 이다. 예제에 앞서 getattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성의 값을 가져오는 경우 >>> getattr(c, 'x') 1 getattr을 사용하지 않고, c.x를 하여도 동일한 결과를 얻을 수 있다. >>> c.x 1 기존에 존재하지 않는 속성을 가져오려 하는 경우 (기본값이 없는 경우)>>> getattr..

Language/Python 2018.01.02

Python - setattr(), object의 속성(attribute) 값을 설정하는 함수

setattr >>> setattr(object, name, value) object에 존재하는 속성의 값을 바꾸거나, 새로운 속성을 생성하여 값을 부여한다. __builtin__ module에 포함된 function 이다. 예제에 앞서 setattr 예제를 위한 object를 다름과 같이 먼저 생성한다. >>> class sample: ... def __init__(self, x): ... self.x = x ... >>> >>> c = sample(1) >>> c.x 1 예제) 기존 속성의 값을 바꾸는 경우 >>> setattr(c,'x',2) >>> c.x 2 새로운 속성을 생성하여 값을 할당하는 경우>>> setattr(c,'y',5) >>> c.y 5 참고> setattr() - object의 ..

Language/Python 2018.01.02