Tag Archives: python

[python] integer 의 bit length

Integer 값에서 bit length를 알아내기
가만히 생각해보면 쉽지만 막상 만드려니 짜증나고, 반올림 같은 것도 생각해야 한다.

python 기본 method 중 bit_length 라는 것을 사용하면 쉽게 고칠 수 있다!

[python] module 설치 관련

일반적으로 linux 직접 깔아서 사용하는 사용자라면 module를 어떻게 깔아야하며, 어디에 깔리는지 전혀 신경쓸 필요가 없을 수도 있다.

하지만, 관리자(root계정)가 아닌 일반 사용자 계정을 갖고 있는데 원하는 module를 깔고 싶을 때 난감 할 수 있다.
이런 경우 여러가지 많은 제약들이 발생한다. 주로 library의 의존성에 대한 것들이다.

위 내용에 대해서는 다른 post에서 다루기로 하고 이번 post에서는 python module를 자신이 원하는 곳에 설치하고 관리하는 방법에 대해 알아보자

system example > red hat 계열
python 위치 > /usr/bin/python (version 2.7.x)
단순히 python을 설치다면 가장 기본적으로 설치되는 위치이다. 그리고, 그 module들은 /usr/lib/python2.7/site-packages/ 에 설치가 된다.
그렇다. 위 python을 이용해 module를 설치하면 /usr/lib/python2.7/site-packages/ 에 설치가 되는 것이다.

그런데? 나는 관리자 계정이 없기 때문에 /usr/lib/ 에 쓰기를 할 수 없다.

이런 경우에 특별한 나만의 계정 directory에 나만의 python module를 설치 할 수 있다.
기본적으로 package를 설치할 때 사용하는 명령어 python setup.py install 에서 –user option을 붙이는 것으로 해결 된다.

default와 무엇이 다를까? 각각을 비교해보자 (출처 : https://docs.python.org/2/install/)
1. python setup.py install
> 설치 위치 -> prefix/lib/pythonX.Y/site-packages
prefix는 sys.prefix 으로 확인 가능

2. python setup.py install –user
> 설치 위치 -> userbase/lib/pythonX.Y/site-packages
userbase는 site.USER_BASE 으로 확인 가능

–prefix를 사용하는 방법도 있으니 위 출처를 참고.
그 밖에도 custom으로 각 각의 필요한 directory를 설정하는 방법도 있다.

마지막으로 해당 설치 path에 대해서 PYTHONPATH 변수를 지정해주면 된다.
setenv PYTHONPATH $NEWPYTHON_MOD_PATH:$PYTHONPATH

뭐 이런식으로.. 저는 cshell을 사용합니다.

[python] pexpect 사용법

shell 명령어에 보면 expect라는 명령어가 있다.
이것은 expected 값을 기반 자동 수행 명령어라고 보면 간단하겠다.

python에는 이와 같은 기능의 pexpect라는 것이 있다.

아래의 example은 FTP 서버에 접속하는 프로그램이다.
접속 후 간단한 명령어를 넣는 동작까지 example로 작성하였다.
parser등을 이용하면, 업로드/다운로드 등의 동작을 단순화 할 수 있다.
– 예전에 어디서 배껴왔는데.. 출처를 몰라서.. 문제시 삭제하겠습니다. 연락주세요..

[python] class inheritance, initialize, argument 정리

우선 기본 예제를 보자

부모 class : TestClassA
자식 class : TestClassB

TestClassA에는 Class variable “Name” 이 있다.
TestClassB를 사용할 것이다.
아래와 같이 arguments를 넘겼다.

TestClassB에서 TestClassA의 상속과 함께 __init__ 하는 방법은 두 가지가 될 수 있는데, (super를 사용하는 방법도 있으나 생략)
1. TestClassA.__init__(self,Name)
2. TestClassA.__init__(self,*args, **kwargs)

1의 경우엔 TestClassA 에서 선언된

Name이라는 class 변수를 전달 받는 것이다.

2의 경우엔 TestClassA로 ClassTestB를 부를 때
( Tb = TestClassB(Name, Company, Config=Config) )
넘긴 인자들을 고대로 받는 것이다.
이 경우에 TestClassA의 arguments를 받는 부분도 아래와 같이 수정되어야 한다.

전체를 몽땅 넘겨받아서 적절히 알아서 쓰는 방식이다.
혼자서 사용하기 편할 수는 있을 것 같은데.. 장, 단점이 있어보인다.

Arguments – *args 와 **kwargs
예제를 수행하면 알 수 있지만,
args에는 입력된 일반 변수가 넘어오고, kwargs에는 dictionary 형태의 것들이 넘온다.

예제를 보면 이해가 쉽다.

위 예제에서 args 와 kwargs의 결과는 아래와 같다.

이것을 요렇게 Tb = TestClassB(Name, Company, a=4, b=3) 바꿔보면,
결과

요렇게도 Tb = TestClassB(Name, Company, [], "") 바꿔보면?

이제야 느낌이 온다..

[python] List Reverse / List to string and convert to integer

아래와 같은 list가 있다고 가정하자

[1,2,3,4,5] 를 [5,4,3,2,1]로 바꾸고
이를 hex code 0x54321 로 바꾸고 싶은 경우이다.