본 글의 코드는 여기에서 보실 수 있습니다. Q. 0부터 99까지 정수의 제곱수로 구성된 리스트를 생성하시오. A. 방법은 여러 가지가 있다. 우선 range 객체와 함수를 하나 만들어놓고 시작한다. def sq(x): return x**2 r = range(100) 처음 배우는 방법은 아래와 같이 리스트에 append를 하는 방식이다. # 쌩 for문 사용 l = [] for i in r: l.append(i**2) 리스트 컴프리헨션을 사용하면 훨씬 간단해진다. # list comprehension l = [i**2 for i in r] 만들어둔 함수 sq를 쓸 수도 있다. # 직접 연산 대신 함수 사용 l = [sq(i) for i in r] map은 이터러블의 각 요소에 함수를 적용시킬 수 있다. ..
2022년 추석 연휴 동안 케라스 창시자에게 배우는 딥러닝(aka 케창딥) 2판을 빠르게 1회독 했습니다. 원래는 개발자를 위한 머신러닝&딥러닝을 볼 계획이었는데, 케창딥을 읽다보니 재밌어서 쭉 읽어버렸습니다. (전자책이라 가방이 가벼워진 것도 한몫) 아래는 초간단 리뷰입니다. 수준 및 내용 - 머신러닝 잘 모르신다면, 혼공머신 먼저 보고 케창딥 보시길 권장합니다. - 책이 다루는 범위가 넓습니다. 기초부터 최근 기술까지 섭렵합니다. - 대신 각 기술을 아주 깊게 설명하지는 않습니다. - 1판에 비해 꽤 많은 내용이 새로 들어왔습니다. - 9장(컴퓨터 비전), 10장(시계열), 11장(텍스트)입니다. 11장은 트랜스포머도 설명합니다. - 설명이 아주 친절한 편은 아닙니다. - 딥러닝의 연산 과정 등에 대..
원문: Learn Python in 21 days!!!!11 (what a lie) 발번역입니다. 오역이 있다면 알려주세요. 내가 처음 산 프로그래밍 책은 “C언어 21일 완성”이었다. MS-DOS용 볼랜드 C++ 컴파일러 3.1(!)이 담긴 CD가 동봉된 2kg짜리 책이었다. 프로그래머를 직업으로 꿈꾸던 그 시절 “21일 완성”은 그야말로 대유행이었다. 단 21일이면 완성이라니! 그리고 21년이 지난 지금까지도 완성하지 못했다. 당시에는 그 책이 C 문법 참고서임을 몰랐으니까. 아무 짝에도 쓸모 없는. 프로그래밍 언어를 배우는 데에는 몇 달 혹은 몇 년의 노력이 필요하다. 초보자를 21일만에 시니어로 만들어주는 명약 따위는 존재하지 않는다. 그렇다고 실망할 필요는 없다. 그게 가능했으면 프로그래머는 이..
세줄요약 증상: matplotlib.pyplot.bar()로 막대 그래프를 그릴 때 막대가 사라지거나 막대 사이의 틈이 없어지는 현상이 있음 원인: bar()는 막대의 위치를 1픽셀 단위로만 계산하는데, 막대 또는 틈이 너무 얇으면 무시하고 그리지 않음 해결책: bar()의 파라미터 중 width를 조절하고, 필요에 따라 figsize를 바꾸거나 edgecolor를 설정하거나 Figure 창의 크기를 조절 일러두기 본 글의 코드 중 캡쳐한 것은 코랩, 코드 블록은 vscode 또는 매트랩에서 실행한 코드입니다. 코드는 모두 여기에서 보실 수 있습니다. 감사의 글 본 글의 아이디어를 주신 페가님께 감사 말씀 드립니다. 이상한 막대 그래프 matplotlib의 bar()를 이용하여 간단히 막대 그래프를 그려..
클래스의 필요성을 어떻게 설명하면 쉽게 와닿을까 고민하다가 예시를 만들어보았습니다. 우리의 민속놀이(?)인 스타크래프트의 대표 유닛 마린을 파이썬으로 구현해보겠습니다. 전부 다 구현할 수는 없으니, 아주 간단히 체력, 공격력, 방어력 정도만 만들어보죠. 마린 2-3마리를 만들어서 서로 공격을 시킬 겁니다. 우선 마린을 만들고 공격 함수 shoot을 만들었습니다. marine1 = {'unit': 'marine', 'hp': 40, 'attack': 6, 'armor': 0} marine2 = {'unit': 'marine', 'hp': 40, 'attack': 6, 'armor': 0} def shoot(me, enemy): enemy['hp'] -= me['attack'] - enemy['armor']..
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가 되지만 그 자체가..