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이다. 이름만 들어도 ..
파이썬에서 숫자는 chained comparison이 되는데 numpy.ndarray는 안된다. 게으른 파이썬 녹화하다가 즉흥적으로 궁금해져서 해봤는데 막혀서 당황했다. 의미적으로는 되어야 할 것 같은데 왜 막아놨지? 궁금해졌다. 챗gpt한테 물어봤으나 뻘소리만 해대길래 검색해봤다. 검색어는 "ndarray chained comparison". 어떤 stackoverflow의 답변을 요약해보면, • PEP 535에서 제안되었으나 연기되어 있는 상태임• 파이썬에서 아래 코드는2 • 아래와 같이 해석됨2 • 논리 연산자 and는 피연산자에 bool을 입힘• 그런데 ndarray는 요소가 2개 이상이면 bool을 입히지 못함 (왜 못하게 해놨지?) • 여튼 해결책으로 bitwise or인 &를 쓰..
수치해석 중간고사에 grading 함수 작성 문제를 출제했다. 그리고 assert를 이용해서 채점 코드를 만들었다. 그리고 문제가 발생했다.학생은 분명히 잘 풀었는데 실패라고 뜬다. 리스트를 수정하는 문제였는데, 나의 의도는 새로운 리스트를 만드는 것이었으나, 입력 리스트를 그대로 수정해서 반환하도록 제출한 학생이 있었다. 리스트 복사본이 문제인가 싶어서 온갖 수정을 가해봤으나 여전히 해결되지 않는다. 값을 하나하나 비교해보아도 분명히 문제가 없는데 자꾸 실패라고 뜬다. 한 시간을 삽질한 끝에 문제를 찾았다. numpy가 import 되지 않았었다.(...) 에러는 NameError였는데 Exception을 대충 썼더니 엉뚱한 결과를 보여주던 것이었다. 예외처리를 성실하게 하지 않으면 독이 될 수 있..
매트랩의 fprintf와 파이썬의 f-string 문법은 닮은 부분이 많다. 사실 거의 같다고 봐도 무방할 정도이다. f-string 문법이 제대로 정리된 페이지가 의외로 없는 듯하여, fprintf와 비교할 겸 만들어보았다. 아래에서 프롬프트가 >>인 것은 매트랩, >>>인 것은 파이썬이다. f-string 문법은 본 문서에 소개한 것 외에도 더 있는데, fprintf와 1:1로 매칭되는 것들만 본 문서에 정리하였다. 1. 그냥 출력 >> disp(256) 256 >>> print(256) 256 2. 정수 >> fprintf('%d\n', 256) %10진수 256 >> fprintf('%o\n', 256) %8진수 400 >> fprintf('%x\n', 256) %16진수 100 >>> print..
후... 힘들었습니다. - 게으른
참고한 곳: 스택오버플로우 리스트 컴프리헨션(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는 그 자체로 하나의..