목록분류 전체보기 (115)
ROKO
python에는 exception class를 상속받은 기본 bulit-in error들이 있다. https://docs.python.org/ko/3/library/exceptions.html Built-in Exceptions In Python, all exceptions must be instances of a class that derives from BaseException. In a try statement with an except clause that mentions a particular class, that clause also handles any excep... docs.python.org 내가 프로그래밍 중 error 호출을 통해 위험관리를 하고 싶을 때 어떻게 해야할까? raise..
python logic을 작성하거나 함수를 실행할때 부가적으로 효율성이나 flow가 잘 흐르는지 확인하기 위해 함수내부에 시간을 측정하는 코드를 넣는 등 부가적인 코드를 작성할 수 있다. 그렇다보면 기존 함수의 logic이 복잡해지고 가독성도 떨어지게 되는데 대안법으로 decorator문법을 지원해준다. def decorator(func): def new_func(*args, **kwargs): print("데코레이터 적용한 함수") result = func(*args, **kwargs) return result return new_func @decorator def add_a_b(a, b): return a + b print(add_a_b(10, 20)) # 데코레이터 적용한 함수 # 30 데코레이터로..
def func(): pass func = function(code, globals[, name[, argdefs[, closure]]]) 두 코드 모두 func이라는 함수를 생성하는 과정이다. 복잡한 과정을 def가 해결해주는데 프로그램을 구현하는 입장에서 한번밖에 사용되지 않을 함수를 위해 위와 같이 함수를 선언하는 것은 메모리와 시간 손실을 일으킬 것이다. 함수의 목적중에 코드의 재사용이 있었다는 사실을 잊지 말자. 사용 후 del 연산자를 통해 메모리 관리를 한다고 하더라도 그 과정자체가 프로그램의 최적화 관점에서 손실이다. 그렇다면 함수가 실행되어야 하는 부분에 알고리즘을 복잡하게 쓰기에는 가독성이 떨어진다. 이를 위한 대안법으로 람다 함수가 있다. lambda def func(x): # do ..
function의 목적 function은 왜 쓰는걸까? 가독성과 코드의 재사용? 성능에는 변화가 없다면 궁극적인 목표에는 안좋은게 아닌가? 파이썬은 def를 통해 함수로 지정하게되면 실행시 함수 내부 코드를 indentation을 기준으로 최적화 코드로 변환한다. 따라서 같은 반복문을 2번 반복하는것보다 함수를 2번 호출하는것이 더 빠르다. 궁금하다면 import time을 통해 각각 실행시간을 확인하는 실험을 해보면 알 수 있다. import time def func(): num = 0 for i in range(100000): num += i t1 = time.perf_counter() num = 0 for i in range(100000): num += i for i in range(100000):..
쉽게 설명하면, 변수에 값을 할당 후 코드실행과정에서 변수의 값이 변동 된다면 mutable 바뀌지 않는다면 immutable이다. bulit-in type is immutable! var = 1 var = 2 print(var) # 2 출력 1에서 2로 바뀌었으니 바뀐거 아냐? 변수에 담긴 객체가 바뀐것이지 변수의 형태가 바뀐것이 아니다. 이러한 것들로 int, float, str, tuple이 있다. 한번 선언된 이후로 type이 변형되는 것이 아닌 내포하는 객체의 값이 변경될 수 있다는 점을 인지하자. mutable mutable 객체는 값이 들어오면 immutable처럼 내부 값을 변화시켜 return하는게 아니라 객체의 형태를 변형시켜 값을 받는다. list, dict, set 과 같은 자료형들..
Container python object는 다양한 class를 상속받을 수 있다. 그 중 data type과 무관하게 데이터를 받을 수 있는 자료구조 형을 container라고 한다. 예를들어 dict, set, str 등등은 container이고, 반대로 float, int, complex는 type이 정해진 literal 형태이다. container는 type()으로는 확인할 수 없고 container를 상속받았는지 확인하기 위한 issubclass()를 통해 알 수 있다. from collections import Container print(issubclass(dict, Container)) # True print(issubclass(int, Container)) # False container..
# python recursion 형식 # tail recursion 이라고도 부름 def fun(): ''' do somethiing ''' return fun() python으로 코드를 구현할때 특히 Dynamic programming(동적프로그래밍)에서 재귀함수 형태를 사용할때가 있다. pyhton 언어를 공부하다가 알게된 사실인데 Python에는 재귀함수의 반복 횟수가 정해져있다. 그 기준이 call stack기준인지 그냥 하나의 함수자체에서 반복되는 총 개수를 의미하는 것인지는 정확히 모르겠지만 이러한 사실을 알게 되었고 그 기준을 수정하는 방법을 소개하고자 한다. import sys limit_number = 'num to maximize' sys.setrecursionlimit(limit_n..
pass 실행할 코드가 없는 경우 의미를 나타내는 코드다. python은 조건문이나 반복문에 명령어를 작성하지 않으면 에러가 발생하므로 pass를 적어 아무것도 실행하지 않는 코드로 그저 비어있음을 의미한다. x = 10 if x>10: pass else: print(x) # 10 출력 continue 이후 아래 코드는 pass와 같이 실행되지 않고 넘어간다. 반복문의 경우 다음 loop로 넘어가게 된다. for i in range(1,6): if i
Python은 OOP이다. 객체를 이용해 프로그래밍을 한다는 뜻인데, 객체가 너무 많아지게 되면 RAM에 부하가 늘어나면서 전체적인 프로그램의 성능이 낮아지게 될 것이다. 이미 사용된 객체는 어떻게 관리해야할까? 기본적으로 python은 사용자가 직접적으로 동적할당과 해제를 할 필요가 없는 언어이다. 모든 type이 이미 객체화가 되어 있기 때문이다. 그렇다면 heap영역을 쓰지 않는 걸까? 그렇지 않다. 내부적으로 python memory manager가 존재하여 해당 객체가 사용될때 heap에 할당하여 자동적으로 메모리 관리를 해준다. 미리 할당하지 않고 사용시에 할당하는 방식은 OS heap 영역의 과부하를 막아주게 된다. 사용된 변수들은 reference counting 방법을 통해 GC(garb..
Python은 OOP를 강제하지는 않지만 방향성을 제공하는 언어이다. 객체 지향 프로그래밍이란 절차지향과 같이 순차적으로 logic을 구성하는것이 아닌 객체들간의 관계로 logic을 구성하는 것을 의미한다. 객체는 class로 부터 생성된 변수로 속성과 함수를 가지고 있는 변수이다. 파이써의 모든 구성 요소는 객체로 정의되어 사용된다. 용어 정리 객체(object) : 파이썬에서 추상화되어 표현되는 데이터 변수(variable) : 객체를 관리하기 위한 메모리 영역 (Ex x = 10, x 는 10이라는 literal을 의미하는 변수) 식별자(identifier) : entity를 구별하기 위해 사용되는 이름 (식별자가 같은 경우 변수에 값이 재할당) id,dientity : 객체 정보가 저장된 변수의 ..