2008년이니까 거의 15년 전 일이긴 합니다만, 파이썬에서 self를 불편해하던 분이 있었습니다. 그래서 제안을 하게 됩니다. 제목이 상당히 자극적이네요. “Redundant is not Explicit” 우리말로 하면 “과잉과 명시明示는 동의어가 아니다” 정도일까요? 이 분의 제안은 아래와 같습니다. 메서드 정의에 self를 강제하는 것은 파이써닉하지 않다. 적어도 메서드 입력 파라미터에서는 self를 없앨 수 있지 않을까? self를 키워드로 만들면 해결되지 않을까? 예를 들자면 class C: def meth(self, arg): self.val = arg return self.val 이렇게 쓰던 코드를 class C: def meth(arg): self.val = arg return self.v..
※ 본 글은 realpython의 정기메일 내용을 편집, 각색 및 내용추가한 것입니다. C나 Java를 먼저 배운 분이라면 시퀀스의 아이템에 인덱스를 아래와 같은 형태로 붙일 것입니다. for i in range(len(my_items)): print(i, my_items[i]) 파이썬에는 이 코드를 간단히 만들어주는 함수가 있습니다. 바로 enumerate()입니다. names = ['Antonio', 'Carlos', 'Jobim'] for index, value in enumerate(names): print(f'{index}: {value}') enumerate()의 기본 기능은 시퀀스의 각 아이템에 인덱스를 부여하는 카운터 변수를 자동생성해주는 것입니다. 위 코드에서는 index가 그 카운터 변..
본 글은 요약본입니다. 전문은 여기를 클릭! NumPy가 리스트보다 빠른 이유는? 1. 원소의 타입 Array의 원소로 정수 하나를 저장하려고 합니다. NumPy array의 경우 정수는 내장 자료형인 int로 저장되지 않습니다. 대신 binary로 변환 후 int32(4 byte)로 캐스팅 되어 저장됩니다. 숫자가 작아서 1 byte만 필요하다면 1 byte로 변환도 할 수 있습니다. 이 경우에는 정수 하나를 저장하는 데에 딱 1 byte만 필요하겠죠. 반면 리스트에 들어가는 정수는 내장 자료형 int 타입으로 저장됩니다. 이 int 타입 하나를 저장하려면 다음 것들이 모두 필요합니다. 1) Size (4 byte) 2) Reference Count (8 byte) 3) Object Type (8 by..
원문: Top 5 Mistakes You Make When Declaring Functions in Python (약간의 의역을 얹었습니다.) 어떤 프로그래밍 프로젝트에서든 함수는 핵심요소입니다. 잘 만들어진 함수는 코드의 가독성을 높이고 유지보수를 쉽게 만듭니다. 반대로 함수를 엉성하게 만들면 가독성이 떨어지고 유지보수 비용이 올라갑니다. 아무리 실력좋은 프로그래머라도 시간이 지나면 자신의 코드를 잊어버리기 마련이므로, 잘 작성된 함수는 프로젝트의 가치를 올려준다고 할 수 있습니다. 물론 파이썬도 예외가 아닙니다. 함수 작성 시 흔히 범하는 실수를 소개하겠습니다. 이 실수들을 이해하고 나면 가독성과 유지보수 면에서 향상된 코드를 짤 수 있을 것입니다. "가독성은 중요하다." - 파이썬 철학 (역자 주:..
아래는 bool로 형변환을 했을 때 False가 되는 것들의 목록입니다. (출처) False로 정의된 상수들 None False 값이 0인 것들 (자료형 무관) 0 0.0 0j Decimal(0) Fraction(0, 1) 빈 시퀀스 (자료형 무관) ' ' (빈 문자열) ( ) (빈 튜플) [ ] (빈 리스트) { } (빈 딕셔너리) set( ) (빈 집합) range(0) (빈 range) 단, [( )]과 같이 빈 튜플이 들어있는 리스트는 False로 인식되지 않습니다. 빈 튜플이라는 원소가 있는 것이니까요. 주의할 점이 하나 있습니다. 위에 나온 것들이 False로 인식된다고 해서 그 자체가 False인 것은 아닙니다. 예를 들어, 빈 리스트는 bool로 형변환을 하면 False가 되지만 그 자체가..
(원문: 9 Skills That Separate Beginners From Intermediate Python Programmers) (의역을 제 마음대로 마구마구 끼얹었습니다.) 1. 로직을 이해해라. + 답부터 찾으려 하지 마라. 코드 자체보다 중요한 것은 코드의 로직을 이해하는 것이다. 로직을 이해해야 문제해결능력이 생기고 그로부터 좋은 코드와 최선의 답을 생각해낼 수 있다. 질문하기도 중요하다. 스스로 문제풀이를 시도하지 않고 답부터 찾으려 한다면, 답을 보고도 아무것도 배울 수 없다. (참고: 프로그래밍 질문 잘 하기) 2. 문제를 정확히 정의해라. (문제를 마음대로 바꾸지 마라.) 파일명에서 확장자를 추출하고 싶다면 어떻게 할까? 문자열의 마지막 세 문자를 꺼내면 될 것 같다. 그래서 아래와..
※ 본업이 개발은 아니지만 코딩을 좋아하는 연구자의 입장에서 쓴 글임을 먼저 밝혀둡니다. 파이썬을 처음 공부하는 분들(특히 학생)이 정말 자주 하는 질문이 있습니다. "파이썬도 자격증이 있나요? 따두면 도움이 될까요?" "파이썬 잘하면 취업 잘되나요?" "기본서 다 봤어요. 이제 뭐 봐야 되나요?" 조금씩 다른 질문들이고 답변도 조금씩 다릅니다만, 이 질문들을 꿰뚫는 더 중요한 질문이 있습니다. "파이썬 배우면 나중에 뭘 할 수 있나요?" 현직에 계신 분들은 "이걸 배워서 어디다 써먹지?"라는 의문은 보통 갖지 않으실 겁니다. 이미 필요해서 배우고 계실테니까요. 하지만 학생분들은 필요해서 배운다기보다는 누가 시키니까 배우는 경우가 많습니다. 시키는 주체는 학교가 될 수도 있고 사회가 될 수도 있습니다. ..
두 가지 방법으로 짜보았습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # product of two unit quaternions # without using if-else def calProdUnitQuat(arg1, arg2): # input string -> Boolean q1 = [arg1=='1'] + [arg1==s for s in 'ijk'] q2 = [arg2=='1'] + [arg2==s for s in 'ijk'] q3 = [0]*4 # https://personal.utdallas.edu/~sxb027100/dock/quaternion.html q3[0] = q1[0]*q2[0] - q1[1]*q2[1] - q1[2]*q2[2] - q1[3]*q2..
Python GUI를 만들 수 있는 framework은 종류가 어마어마하게 많습니다. Cross-platform만 38가지나 있습니다. 물론 그 중에 인기가 많은, 즉 유저가 많은 framework이 있습니다. 하지만 막상 검색을 해보면 추천하는 framework이 각양각색입니다. 직접 써보기 전에는 장단점을 파악하기 어렵고, 그또한 개인차가 있을 수 있겠지요. 그래서 구글검색을 통해 각 framework이 얼마나 추천을 받는지 조사해봤습니다. 결과를 보니 Tkinter와 PyQt가 가장 많이 추천을 받고 있군요. Tkinter는 python에 포함되어 있는 모듈이라는 장점이 있고 (즉, 모듈 추가 설치가 필요하지 않음) 배우기 쉽고, 오래된 만큼 안정적이라고들 얘기합니다. 대신 이쁘지 않다는 게 단점으..
python console에서 import this를 하면 아래와 같이 The Zen of Python을 볼 수 있습니다. Zen은 '철학' 정도로 보면 될 것 같습니다. 번역은 나무위키 것을 가져와 약간 수정했습니다. 아름다운 것이 추한 것보다 낫다. (Beautiful is better than ugly.) 명시적인 것이 암묵적인 것보다 낫다. (Explicit is better than implicit.) 간결한 것이 복잡한 것보다 낫다. (Simple is better than complex.) 복잡한 것이 난해한 것보다 낫다. (Complex is better than complicated.) 수평적인 것이 내포된 것보다 낫다. (Flat is better than nested.) 여유로운(희소..