conda 사용법을 간단히 정리해보았다.이 글 작성에 도움 주신 코봉님께 감사 말씀 드립니다. conda create -n example : example이라는 이름의 가상환경을 만듦 : -n 대신 --name이라고 써도 됨 : 비어있는 가상환경이 만들어지며, 아무것도 - 파이썬도 - 설치되지 않음 conda create -n example python : 가상환경 만들면서 파이썬도 같이 설치 : 파이썬 외에도 pip, tk, sqlite 포함해서 10여 가지가 자동으로 설치됨 : 아래는 2024년 8월 20일 기준, python 설치 시 같이 설치되는 패키지 목록임The following NEW packages will be INSTALLED: bzip2 pkgs..
재밌는 글을 봤다. list.extend와 list.iadd는 표면적으로는 동일해 보인다. 그런데 함수 내에서 global 변수를 바꾸려고 하면 동작이 달라진다. 에러는 global 변수를 바꾸려고 했다는, 흔히 볼 수 있는 에러이다.문제는 왜 두 개가 다르냐는 것인데, x += something은 객체의 iadd 메서드를 호출하는 것인데, 사실 아래의 코드가 실행된다. x = x.__iadd__(something) 여기서 assignment가 문제가 된다. 흥미로운 점은, 아래 코드는 문제 없이 잘 돈다. 여기에는 assignment가 없기 때문이다. x += something은 __iadd__를 호출하고, __iadd__는 self를 반환하므로, x += something은 x의 객체가 바뀌..
파이썬에는 syntax sugar라는 게 있다. Syntactic sugar라고도 부른다.굳이굳이굳이 번역하자면 문법적 설탕이라고 부를 수 있겠지만,솔직히 끔찍한 번역이다. 파이썬의 문법을 엄밀히 따른다면 아래의 statement는 에러가 떠야 한다. a = 1c = b = a 기호 =(assignment)가 operator가 아니라 statement라서 반환값이 없기 때문이다. (참고) 하지만 에러가 발생하지 않는다. 파이썬에서는 위 statement를 아래와 같이 재해석하기 때문이다. temp = ac = tempb = temp 이걸 chained assignment라고 부른다. 참고로 왼쪽부터 대입한다. (참고) 비슷한 게 하나 더 있다. Chained comparison이다. 이름만 들어도 ..
수치해석 중간고사에 grading 함수 작성 문제를 출제했다. 그리고 assert를 이용해서 채점 코드를 만들었다. 그리고 문제가 발생했다.학생은 분명히 잘 풀었는데 실패라고 뜬다. 리스트를 수정하는 문제였는데, 나의 의도는 새로운 리스트를 만드는 것이었으나, 입력 리스트를 그대로 수정해서 반환하도록 제출한 학생이 있었다. 리스트 복사본이 문제인가 싶어서 온갖 수정을 가해봤으나 여전히 해결되지 않는다. 값을 하나하나 비교해보아도 분명히 문제가 없는데 자꾸 실패라고 뜬다. 한 시간을 삽질한 끝에 문제를 찾았다. numpy가 import 되지 않았었다.(...) 에러는 NameError였는데 Exception을 대충 썼더니 엉뚱한 결과를 보여주던 것이었다. 예외처리를 성실하게 하지 않으면 독이 될 수 있..
후... 힘들었습니다. - 게으른
참고한 곳: 스택오버플로우 리스트 컴프리헨션(LC)에 if만 있을 때는 왜 if가 맨 뒤로 가고[i**2 for i in range(10) if i%3 == 0] if와 else가 모두 쓰일 때에는 왜 if-else가 for보다 앞에 올까?[i**2 if i%3 == 0 else i*2 for i in range(10)] 한줄요약: if만 있는 것은 filter이고, if-else는 3항 연산자이기 때문이다. if만 있는 경우, if는 filter의 역할이다. 즉, filter를 통과한 것만 살아남는다. LC의 문법은 filter를 뒤에 쓴다.[ for in if ]실제로 공식 문서를 보면 LC 뒤에 if가 추가될 수 있다고만 나오지, else는 언급되지 않는다. if-else는 그 자체로 하나의..
본 글의 코드는 여기에서 보실 수 있습니다. 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은 이터러블의 각 요소에 함수를 적용시킬 수 있다. ..
세줄요약 증상: matplotlib.pyplot.bar()로 막대 그래프를 그릴 때 막대가 사라지거나 막대 사이의 틈이 없어지는 현상이 있음 원인: bar()는 막대의 위치를 1픽셀 단위로만 계산하는데, 막대 또는 틈이 너무 얇으면 무시하고 그리지 않음 해결책: bar()의 파라미터 중 width를 조절하고, 필요에 따라 figsize를 바꾸거나 edgecolor를 설정하거나 Figure 창의 크기를 조절 일러두기 본 글의 코드 중 캡쳐한 것은 코랩, 코드 블록은 vscode 또는 매트랩에서 실행한 코드입니다. 코드는 모두 여기에서 보실 수 있습니다. 감사의 글 본 글의 아이디어를 주신 페가님께 감사 말씀 드립니다. 이상한 막대 그래프 matplotlib의 bar()를 이용하여 간단히 막대 그래프를 그려..
나름 유명한 유머입니다. 이 유머의 포인트는 느낌표를 강조로 보느냐 factorial로 보느냐에 있습니다. 이과의 관점에서는 이라서 옳은 답이고, 문과의 관점에서는 이라야 옳은 답이 됩니다. 이런 유머가 가능한 숫자는 40, 32, 4 외에도 더 있습니다. 예를 들어 아래와 같은 조합도 가능합니다. [문제1] A - B÷2 = C!의 형태로 동일한 유머가 가능한 10000 이하의 자연수 A, B, C는 총 몇 쌍이 있을까요? 답은 총 3쌍입니다. 여러분도 한번 찾아보세요! [문제2] A - B÷D = C!의 형태로 동일한 유머가 가능한 2 이상 100 이하의 자연수 A, B, C, D는 총 몇 쌍이 있을까요? 역시 답은 총 3쌍입니다. 여러분도 한번 찾아보세요! - 게으른
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..