개발 (Development)/┣Python
-
1. Question 함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다. 하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다. 일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다. 매개변수로 전달할 수 있어야 한다. 리턴값으로 사용될 수 있어야 한다. 다..
[파이썬 심화] 함수의 변수처럼 사용하는 법 - 일급객체 (First-class Citizen)1. Question 함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다. 하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다. 일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다. 변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다. 매개변수로 전달할 수 있어야 한다. 리턴값으로 사용될 수 있어야 한다. 다..
2022.09.12 -
1. Introduction c와 달리 자바나 파이썬에서 문자열은 immutable이다. 즉, 초기화한 뒤로 문자열을 수정할 수 없다. 불변타입을 지정하는 const같은 명령어가 없는 것도 아니고 대체 왜 이렇게 불편하게 했을까? 2. Cause 2.1 참조 횟수 string 타입은 중복 참조가 매우 많다. 다이얼로그 메세지에서 등장하는 문자열은 물론이고, 대부분의 프로그램에서 하드 코딩된 문자열은 참조만 할 뿐, 수정할 일이 없다. 2.2 스레드 보안 이건 다른 변수도 마찬가지겠지만, Shared area에 있는 변수들은 변화에 민감하다. 어떤 스레드가 함부로 값을 바꿨다가 다른 수 많은 스레드가 이상한 값을 읽을 수도 있다. 2.3 해싱 내가 생각하기로는 이쪽이 가장 큰 이유다. 수정가능한 자료형은 ..
[파이썬 철학] 문자열이 immutable 타입인 이유1. Introduction c와 달리 자바나 파이썬에서 문자열은 immutable이다. 즉, 초기화한 뒤로 문자열을 수정할 수 없다. 불변타입을 지정하는 const같은 명령어가 없는 것도 아니고 대체 왜 이렇게 불편하게 했을까? 2. Cause 2.1 참조 횟수 string 타입은 중복 참조가 매우 많다. 다이얼로그 메세지에서 등장하는 문자열은 물론이고, 대부분의 프로그램에서 하드 코딩된 문자열은 참조만 할 뿐, 수정할 일이 없다. 2.2 스레드 보안 이건 다른 변수도 마찬가지겠지만, Shared area에 있는 변수들은 변화에 민감하다. 어떤 스레드가 함부로 값을 바꿨다가 다른 수 많은 스레드가 이상한 값을 읽을 수도 있다. 2.3 해싱 내가 생각하기로는 이쪽이 가장 큰 이유다. 수정가능한 자료형은 ..
2020.08.23 -
1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
파이썬에 in 연산자의 시간복잡도는 얼마일까?1. Introduction 파이썬에서 in 연산자는 검색이나 순회에 사용된다. 순회는 항상 전체를 순회하니까 효율의 개선이 필요하다고 느껴지 않지만, 검색은 그렇지 않다. 이번 포스트에서는 in의 검색 효율이 자료구조에 따라 어떻게 바뀌는지를 알아본다. 2. Detail 파이썬에서 리스트와 튜플은 array로 구현된다. 따라서, 알맞은 원소를 찾아내기 위해서는 array를 처음부터 끝까지 순회할 수 밖에 없다. 리스트와 튜플에 대한 in 연산자의 시간복잡도는 $O(n)$이다. 반면에, 셋과 딕셔너리는 hash로 구현된다. hash에 검색 성능이 hash function에 의존하는 만큼, 성능이 최선일 때 $O(1)$에서 최악일 때 $O(n)$까지 요동친다. 웬만한 경우에서, 특히 고정된 리스트에서 검색..
2020.08.12 -
1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
파이썬에서 파일의 동일성을 검사하는 간단한 방법 + 파일의 크기1. Introduction 파이썬으로 이미지 관련 코딩을 하다보면, 두 이미지가 같은지 검사해야 할 일이 생긴다. 직접 짜야한다면, 크기를 비교하던가, 각 픽셀값으로 머클트리를 만들던가 하겠지만 파이썬에서는 간편한 메서드를 지원한다. filecmp 라이브러리의 cmp 메서드는 두 파일간의 동일성을 반환한다. 또한, 파일의 크기를 알아내기 위해서는 os.path의 getsize 메서드를 이용하면 된다. 2. Practice from filecmp import cmp print(cmp('sampleimage_1.jpg','sampleimage_1.jpg')) print(cmp('sampleimage_1.jpg','sampleimage_2.jpg'))
2020.08.12 -
1. Introduction 파이썬을 주로 쓰는 사람은 알겠지만 파이썬은 대표적인 타입리스 언어이다. 따라서 변수에 숫자가 몇 자리든 그냥 대입하면 대입하는 대로 초기화된다. 하지만 파이썬에도 엄연히 암묵적으로 변수의 타입을 정해두고 있다. 그 중에는 코더에게 친숙한 int가 있다. 그럼 여기서 의문이 생긴다. c나 자바같은 언어에서는 int의 범위가 4바이트로 제한되어 있다. 파이썬도 암묵적으로라도 타입이 있다면 오버플로우가 나지 않을까? 2. practice 파이썬3를 기준으로 정수의 최댓값은 sys의 maxsize로 알아낼 수 있다. 또한 type메서드는 암묵적인 변수의 타입을 알아낼 수 있는 메서드이다. a = int(sys.maxsize) print(a, type(a)) a += 1 print(..
파이썬에서 int로 캐스팅한 변수는 오버플로우가 날까?1. Introduction 파이썬을 주로 쓰는 사람은 알겠지만 파이썬은 대표적인 타입리스 언어이다. 따라서 변수에 숫자가 몇 자리든 그냥 대입하면 대입하는 대로 초기화된다. 하지만 파이썬에도 엄연히 암묵적으로 변수의 타입을 정해두고 있다. 그 중에는 코더에게 친숙한 int가 있다. 그럼 여기서 의문이 생긴다. c나 자바같은 언어에서는 int의 범위가 4바이트로 제한되어 있다. 파이썬도 암묵적으로라도 타입이 있다면 오버플로우가 나지 않을까? 2. practice 파이썬3를 기준으로 정수의 최댓값은 sys의 maxsize로 알아낼 수 있다. 또한 type메서드는 암묵적인 변수의 타입을 알아낼 수 있는 메서드이다. a = int(sys.maxsize) print(a, type(a)) a += 1 print(..
2020.08.11 -
1. Introduction 파이썬 코드를 보다보면 함수의 인수로 *, **가 있는 것을 볼 수 있다. 이것들은 이 메서드에 인수를 몇개를 보낼지 모르겠을 때 쓰는 것이다. 메서드에 일단 인수를 갖다 박으면, *는 튜플로 **는 딕셔너리의 형식으로 묶어서 전달한다. 2. Practice def star(*a): print(a) def double_star(**b): print(b) star(1, 2, 3) double_star(a=1, b=2, c=3)
*(star), **(double star) 파라메터는 뭐하는데 쓰는 걸까?1. Introduction 파이썬 코드를 보다보면 함수의 인수로 *, **가 있는 것을 볼 수 있다. 이것들은 이 메서드에 인수를 몇개를 보낼지 모르겠을 때 쓰는 것이다. 메서드에 일단 인수를 갖다 박으면, *는 튜플로 **는 딕셔너리의 형식으로 묶어서 전달한다. 2. Practice def star(*a): print(a) def double_star(**b): print(b) star(1, 2, 3) double_star(a=1, b=2, c=3)
2020.08.11 -
1. Introduction 다른 사람의 코드를 보다가 이런 것을 발견했다. def _from_rgb(rgb): """translates an rgb tuple of int to a tkinter friendly color code """ return "#%02x%02x%02x" % rgb rgb 튜플을 tkinter에 맞는 색상 코드로 바꾸는 함수랜다. 2. Analysis c에서 printf 문자열 포맷팅한 사람은 알겠지만 %는 문자열 뒤에 인수로 대체하겠다는 뜻이다. 16진수는 보통 x로 표현하는데 02x는 2자리를 사용할 것이며, 빈자리는 0으로 채우겠다는 의미이다. 맨 앞에 #은 그냥 의례적으로 16진수 색상 코드앞에 붙이는 듯하다. 내가 놀란 것은 튜플안에 개수가 맞기만 하면, 인수들이 문자열..
RGB 색상을 16진수 코드로 변환1. Introduction 다른 사람의 코드를 보다가 이런 것을 발견했다. def _from_rgb(rgb): """translates an rgb tuple of int to a tkinter friendly color code """ return "#%02x%02x%02x" % rgb rgb 튜플을 tkinter에 맞는 색상 코드로 바꾸는 함수랜다. 2. Analysis c에서 printf 문자열 포맷팅한 사람은 알겠지만 %는 문자열 뒤에 인수로 대체하겠다는 뜻이다. 16진수는 보통 x로 표현하는데 02x는 2자리를 사용할 것이며, 빈자리는 0으로 채우겠다는 의미이다. 맨 앞에 #은 그냥 의례적으로 16진수 색상 코드앞에 붙이는 듯하다. 내가 놀란 것은 튜플안에 개수가 맞기만 하면, 인수들이 문자열..
2020.08.10