Languages & Frameworks
[python] argparse, python-fire
[python] argparse, python-fire
2017.02.26argparse (docs)원래 파이썬에서 프로그램 실행 시 인자( e.g., ``c main(int argc, char *argv[])`` )를 받기 위해서는 sys모듈의 ``python sys.argv``를 이용해야 한다.```pythonargs = sys.argv[1:]``` 이를 대체하는 argv 파싱 라이브러리로 `` argparse``를 사용하면 더 편하다.(optparse는 업데이트가 중단되어 argparse에 포함 되었다.) ``python sys.argv`` 사용할 필요 없이 ``python argparser.parse_args()`` 하는 순간 알아서 argument를 가져온다.```pythonargparser = argparse.ArgumentParser(description='tis..
[python] 파일 배포, python with C
[python] 파일 배포, python with C
2017.02.26파일 배포보통 `` pyinstaller``로 .exe를 만든 다음 배포한다. python에서 C를 사용하는 방법속도 향상을 위해 pypy를 고려하는 경우도 있는데, pre-JIT가 느린건 그렇다 치더라도native python으로만 구현해야 동작을 보장할 수 있다는 절대적인 단점이 있다. C extension을 사용하는 다른 라이브러리를 사용하는 경우 pypy가 제대로 동작함을 보장할 수 없다. 어느 경우든 C running time은 동일하다고 봐도 된다.간단하게 사용할 때는 ctypes를, 규모있는 라이브러리를 사용할 때는 C extension을( 아마 텐서플로우도 이렇게 만들지 않았을까 싶다. 텐서플로우는 Core에 C++을 사용한다. ) 사용하면 된다. Cythonhttp://cython.org..
[Regex] Python
[Regex] Python
2017.02.23항상 시작 ^와 끝나는 $를 써주는게 좋다!!! 특히 $ 안붙여서 이어지는 문자가 있어도 match로 뜨는 경우가 있다. 정규표현식은 기본적으로 greedy하다는 것을 항상 명심한다. 긴 문자열을 집어 넣을 때, (page html tag 파싱이라던가.) 반드시 greedy/non-greedy를 신경써주어야 한다. JS에서는 $를 사용하지만, python에서는 \를 사용한다. notepad++에서는 둘 다 지원. $& : 일치하는 문자열 $` : 일치하는 부분의 앞부분 문자열 $' : 일치하는 부분의 뒷부분 문자열 $1, $2, $3... $n : n번 서브그룹 Python regular expression http://devdocs.io/python~3.6/library/re raw string은 기본..
[python] import 관련 : 모듈, 패키지, __init__.py, __all__
[python] import 관련 : 모듈, 패키지, __init__.py, __all__
2017.02.23모듈 단독 실행 시 import 경로 문제 ``` ├── common │ ├── __init__.py │ ├── copy.py │ └── clean.py ├── T1036 │ ├── __init__.py │ ├── bar.py │ ├── foo.py ├── run.py ``` 우선, 기본적인 import 동작 방식 python run.py 커맨드로 실행하는 경우, foo.py 파일 내에서 모듈 참조는 아래와 같다. ```python from .bar import BarCls # .으로 참조하는 경우 그 파일 자체의 위치(T1036) 기준 찾는다 from common.copy import CopyNoMetaCls # 절대 경로로 명시하는 경우는 python 커맨드 대상이 되는 파일(run.py 디렉터리) ..
[python] 함수, 클래스, 객체, *args, **kwargs
[python] 함수, 클래스, 객체, *args, **kwargs
2017.02.23```python*args # 가변인수**kwargs # 가변 키워드 인수. key=value 형태의 가변 길이 인수를 받을 때. dict 형태로 넘겨받게 된다.``` 키워드 인수를 반드시 key=value 형식으로만 받고 싶을 때```pythondef test(arg, key=None): pass test(1, 2)```positional arg 다음에 이어서 그냥 인자를 넘기면 알아서 위치대로 키워드 인자로 들어간다. 반드시 ``py key=3``처럼 지정해주어야만 동작하도록 하고 싶은 경우, ``py *``을 적는다. 라이브러리 코드 보면 저런게 꽤 많다.```pythondef test(arg, *, key=None):``` return``python return (a, b)``C 였다면 여러 (타..
[python] List, Tuple, Dictionary, Set, Enumerate, sort 정렬
[python] List, Tuple, Dictionary, Set, Enumerate, sort 정렬
2017.02.23`` list()``함수를 이용해 다른 데이터 타입을 리스트로 변환할 수 있다.`` tuple()``함수를 이용해 다른 데이터 타입을 투플로 변환할 수 있다.`` dict()``함수를 이용해 두 값으로 이루어진 시퀀스를 딕셔너리로 변환할 수 있다. 항목 삭제```pythondel arr[offset]arr.pop(offset)arr.remove(value) # 값으로 삭제``` 값을 이용해 인덱스 알아내기```pythonarr.index(value)``` Array파이썬 기본 리스트 `` []``는 array 보다는 linked list에 가깝다.array를 사용하기 위해서는 array나 numpy를 사용해야 한다. numpy는 좋은 라이브러리이지만, 서드파티 라이브러리를 쓰기 애매한 경우 array도 ..
[python] 정수 실수 자료형
[python] 정수 실수 자료형
2017.02.15파이썬에서는 모든 것이(데이터 타입이나 함수, 프로그램까지) 객체로 구현되어 있다.함수가 일급 객체이기 때문에 JS같이 함수형으로 프로그래밍 할 수도 있다. 파이썬에서 변수를 값으로 초기화하면 자바의 wrapper class 비슷하게 동작한다.1) 값을 담은 객체로 생성된다. 2) 변수는 이 객체를 가리킨다.`` a = 3`` 하면 `` a``라는 변수에 `` 3``이 담기는게 아니라 `` 3``이라는 정수형 객체가 생성되고 `` a``가 객체 `` 3``을 가리키게 된다.자바의 wrapper class도 값을 담은 객체가 생성되고 이를 가리키게 된다. 그러나 값을 4로 변경하고 싶을 때, 자바의 경우 객체에 담긴 값을 변경하거나 새로운 4라는 객체를 생성하는 두가지 방법을 사용할 수 있지만 파이썬은 후..
[python] 팁, 메모
[python] 팁, 메모
2017.02.06hidden-features-of-python 설정값 (config file. properties, json, yml) 관리하기 https://mingrammer.com/ways-to-manage-the-configuration-in-python/ editable로 설치 ```python pip install --editable . -e, --editable Install a project in editable mode (i.e. setuptools “develop mode”) from a local project path or a VCS url. ``` 패키지 수동 설치 패키지 압축을 해제하고 `` dist``(distribution) 폴더로 이동해서 다시 tar 압축 해제 반드시 해당 폴더에서 진행할..
Assembly
Assembly
2016.11.18Intel x86 Architecture ( windows ) 연산 방향 ←AT&T Architecture ( *-NIX계열 ) 연산 방향 → ( * gdb가 아니라 objdump에서 확인해야 함 ) Inline Assembly```cint input = 3;int output = 0;__asm__ __volatile__( "mov %1, %%eax \n\t" "add $1, %%eax \n\t" "mov %%eax, %0 \n\t" : "=r" (output) : "r" (input) : "eax"); // clobber```output / input / clobber를 사용하는 경우(Extended asm), asm에서 레지스터를 사용할 때 반드시 ``c %%``로 적어주어야 한다. 반대로 Basic..
[C] printf, scanf계열
[C] printf, scanf계열
2016.11.10```c%p == %#x%2x 2자리 출력. 빈칸일 경우 공백으로 채움%02x 2자리 출력. 빈칸일 경우 0으로 채움%u unsigned type 출력. 기본은 int%h short 출력. h 한 개 붙일 때 마다 1/2씩 감소.%hhu uint8_t 출력%hhx uint8_t 16진수 출력``` ``c scanf()`` 쓸 때 마지막 개행문자가 버퍼에 남지 않을 수 있도록 format string 끝에 ``c \n``을 적어주는 것이 좋다.표준 함수에서 BOF를 예방하는 법은 ``c %100s`` 같이 사용하는 것. ( 입력을 100개의 char로 제한. )``c scanf()``는 다양한 형식을 입력받아야 할 때 사용하고, 단순히 문자열을 입력 받는 함수가 필요하다면 ``c fget()``를 사용하는..
[C] atoi / strtol , sprintf : 문자열 > 숫자, 16진수 변환
[C] atoi / strtol , sprintf : 문자열 > 숫자, 16진수 변환
2016.11.06문자열 > 숫자```c#include int atoi(const char *nptr);long atol(const char *nptr);long long atoll(const char *nptr); long int strtol(const char *nptr, char **endptr, int base); // strtollunsigned long int strtoul(const char *nptr, char **endptr, int base); //strtoull``` 직접 변환하기```cpp auto i = 0; while (isdigit(input[pos])) i = i * 10 + input[pos++] - '0';``` 숫자 > 문자열```c#include int printf(const char ..
Pointer
Pointer
2016.09.14추적 주소 값 1284EA43 71 (**a) 125F7458 1284EA43 (*a) 122EF560 (&a) 125F7458 (a) ②→ ①↖ 포인터는 1 2 순서로 이동하며 따라가면 편하다. 포인터는 주소, 0차, 1차, 2차, ...로 생각하면 편하다. 주소 0차 1차 2차 &a a *a **a 122EF560 125F7458 1284EA43 71 포인터를 지원한다는 것은 어떤 변수에 대해 ``c &``연산을 통해 변수의 주소를 구할 수 있음을 의미한다. 자바도 참조개념을 사용하지만 포인터를 지원하지 않는다고 하는 것은 이런 맥락에서다. 포인터 배열과 배열 포인터 ```c int *p[4]; // 포인터 배열. [주소, 주소, 주소, 주소] int (*p)[4]; // 배열 포인터. [크기 4인 ..