본문 바로가기

전체 글62

파이썬(Python) 외부 프로그램 실행하기 파이썬 3.5 이후 버전에서 다른 프로그램을 실행하기 위해서는 subprocess 모듈의 run() 함수를 사용하면 됩니다. subprocess.run()은 실행후 외부 프로그램이 실행 왼료되면 CompletedProcess를 반환하며 returncode등의 결과를 가지고 있습니다. >>> import subprocess >>> a = subprocess.run(['ls', '-al']) total 0 drwxr-xr-x 2 jlim staff 64 11 Sep 23:45 . drwxr-xr-x 9 jlim staff 288 11 Sep 23:45 .. >>> print(a) CompletedProcess(args=['ls', '-al'], returncode=0) 파이썬 3.5 이전 버전을 사용하고 있.. 2020. 9. 11.
파이썬(Python) yield 키워드 이해하기 파이썬 코드를 보다면 yield라는 녀석이 종종 보이긴 하는데 그 의미가 직관적으로 와닿지는 않습니다. 이 포스팅에서 조금 쉽게 yield를 이해 해보는 시간을 갖도롤 하겠습니다. yield를 이해하기 위해서는 Iterable과 Generator를 이해하고 있어야 합니다. Iterable을 알아보기 위해 리스트는 순회하면서 리스트 아이템들을 출력하는 코드를 작성했습니다. my_list = [1, 2, 3] for i in my_list: print(i) # 1 # 2 # 3 위의 코드에서 my_list는 Iterable입니다. 즉, for ~ in ~ 구문에 넣어서 그 아이템들을 순회(Iteration) 할 수 있는 것들은 모두 Iteration이라고 볼 수 있습니다. 그래서 Iteration 가능한 딕.. 2020. 9. 11.
파이썬(Python) if __name__ == '__main__': 은 무엇일까? 파이썬 인터프리터는 파이썬 스크립트가 실행될 때 __name__ 과 같은 스페셜한 변수들에게 값을 할당합니다. 아래와 같은 my_module.py 라는 스크립트를 작성해 볼께요. # my_module.py def my_name(): print('J Builder') if __name__ == '__main__': my_name() 이 스크립트를 파이썬 인터프리터가 실행을 하면 __name__ 변수에 '__main__' 이라는 문자열값이 할당이 됩니다. ➜ python_test python my_module.py J Builder 그럼 질문이 하나 생길텐데요. 아래 test_module.py처럼 그냥 if __name__ == '__main__': 구문 없이 my_name() 함수를 호출하면 안될까요? #.. 2020. 9. 11.
파이썬(Python) 문자열을 in-place로 수정하는 방법 파이썬의 문자열은 immutable 타입이기 때문에 in-place로 문자열을 수정할 수는 없습니다. 하지만 io.StringIO를 사용하면 in-place로 object의 문자열 수정이 가능합니다. io.StringIO를 사용하는 방법은 다음과 같습니다. from io import StringIO s = "J-Build is awesome!" sio = StringIO(s) s = sio.getvalue()# sio의 문자열값을 읽습니다. print(s) # J-Build is awesome! isinstance(s, str)# s는 str 타입입니다. # True # 'awesome' 이후부터 내용을 수정하기 위해서는, # sio 오브젝트의 내부 포인터를 'awesome'의 시작 인덱스로 옮겨줘야 합.. 2020. 9. 10.
파이썬(Python) 2진수 10진수로 변환하기 먼저 10진수를 2진수로 변환은 bin() 함수를 통해서 가능합니다. b = bin(16) print(b) # 0b10000 2진수를 다시 10진수로 변환하기 위해선 int() 함수를 사용해 주면 됩니다. a = int('0b10000', 2) print(a) # 16 2020. 9. 10.
파이썬(Python) 8진수 16진수 정수 표현하기 8진수 정수는(octal integer)는 숫자 0과 영문 소문자 o 또는 대문자 O를 써주고 정수를 바로 써주면 됩니다. a = 0o10 print(a) # 8 16진수 정수는(hexadecimal integer는 숫자 0과 영문 소문자 x 또는 대문자 X를 써주고 정수를 바로 써주면 됩니다. a = 0x10 print(a) # 16 2020. 9. 10.
4-Digit 디스플레이 연결하기 [라즈베리파이(Raspberry Pi)] 오늘 포스팅에선 라즈베리파이에 4-Digit 디스플레이(Display)를 연결을 해보고 파이썬 프로그램으로 시간을 표시해 보도록 할께요. 제가 사용할 4-Digit 디스플레이는 seeedstudio의 Grove 4-Digit Display입니다. 준비물 최신 OS가 설치된 라즈베리파이 (설치 과정은 이 글을 참고 하세요) 브레드 보드(빵판) 점퍼 케이블 4-Digit 디스플레이 준비물이 세팅이 되었다면 라즈베리파이에 아래처럼 점퍼 케이블을 연결해주세요. 아래 핀 번호로 다시 살펴보면 빨간선(전원)은 2번, 검은선(그라운드)는 6번, 흰선은 33번 노란선은 32번 핀에 연결해 주었습니다. 그리고 브레드 보드를 사용해서 연결을 해줍니다. 디스플레이에서 직접 같은 색깔끼리 연결해주어도 무방합니다. 저는 연결의.. 2020. 9. 10.
파이썬(Python) 전역변수 함수에서 접근방법 파이썬 전역변수(global variable)를 함수에서 접근하기 위해서는 함수내에서 명시적으로 global 키워드를 사용해서 선언을 해주어야 합니다. my_name = "J Builder" def change_name(): global my_name my_name += "!!!" change_name() print(my_name) # J Builder!!! 만약 global 키워드를 사용하여 선언하지 않는다면 함수 내에서 해당 변수에 수정하는 사항들은 반영되지 않습니다. 정확히는 함수내에 있는 변수는 함수 안에서만 영향력을 갖는 지역변수로써 전역변수와는 다른 또 다른 변수가 되는것이죠. my_name = "J Builder" def change_name(): my_name += "!!!"# 여기서 my.. 2020. 9. 10.
파이썬(Python) 리스트 for 루프 중(iteration) 특정 아이템 제거하기 리스트(list)를 for나 while로 iteration 하는 도중에 특정 아이템을 제거하고자 할때는 아래와 같이 list comprehension 을 사용하면 됩니다. mylist = [x for x in mylist if check_if_valid(x)] 아래 예제 코드로 확인해 볼께요. 이 예제는, 리스트를 순회하면서 음수들을 제거하는 코드입니다. # 아이템 x가 0 또는 양수면 True, 음수면 False 반환 def check_if_valid(x): if x >=0: return True return False mylist = [-1, 2, 10, -100, 0, 5, 7, -3] mylist = [x for x in mylist if check_if_valid(x)] print(mylist).. 2020. 9. 10.
파이썬(Python) 함수 참조에 의한 호출? C와 같은 언어에선 함수 호출 시 인자로 포인터를 넘겨서 참조(reference)를 가져올 수 있습니다. 이런 개념에 익숙하다면 파이썬에서의 함수 호출 시 인자가 '값에 의한 호출(call by value)'인지 '참조에 의한 호출(call by reference)'인지 헷갈릴 때가 많습니다. 이럴 때는 딱 한가지만 기억하세요. 파이썬은 '할당에 의한 전달(pass by assignment)' 이다. 먼저 함수를 사용하지 않는 아래 예제부터 먼저 볼께요. 변수값이 함수내에서 수정이 가능한지 확인하기 위해서 mutable 타입인 리스트(list)를 사용해 보겠습니다. a = [1, 2, 3] # 리스트(list) [1, 2, 3]을 a에 할당 했습니다. a는 리스트 [1, 2, 3]을 가리키게 되죠 b =.. 2020. 9. 10.
파이썬(Python) 2차원 리스트 합치기 2차원 리스트의 아이템들을 모두 합쳐서 1차원 리스트를 만드는 방법에 대해서 알아볼께요. 만약 아래과 같은 리스트가 있다면 list_2d = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] # 위의 2차원 리스트를 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 처럼 다 합치고 싶은거죠. itertools 모듈을 사용하면 쉽게 1차원 리스트로 만들 수 있습니다. import itertools list_2d = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] merged = list(itertools.chain.from_iterable(list_2d)) print(merged) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,.. 2020. 9. 9.
파이썬(Python) 리스트 복사하기 파이썬(Python)으로 코딩할 때 가끔씩 리스트를 복사할 일이 생깁니다. 하지만 주의하지 않으면 오류를 만들어 디버깅을 힘들게 할 수 도 있습니다. 즉, 아래와 같이 새로운 리스트에 기존 리스트를 할당해 버리면 실제로 복사가 일어나지 않고 새로운 리스트는 기존 리스트를 참조하게 됩니다. 그래서 기존 리스트의 값을 변경해주면 새로운 리스트의 값 역시 바뀌게 되죠. old_list = [0, 1, 2, 3] new_list = old_list print(new_list) # [0, 1, 2, 3] old_list[0] = 10 print(new_list) # [10, 1, 2, 3] 실제로 독립된 두개의 리스트를 갖기 위해서는 아래와 같은 방법들로 가능합니다. 먼저, 제가 선호하는 방법인 슬라이싱으로 복사.. 2020. 9. 9.