재밌는 글을 봤다. list.extend와 list.iadd는 표면적으로는 동일해 보인다. 그런데 함수 내에서 global 변수를 바꾸려고 하면 동작이 달라진다. 에러는 global 변수를 바꾸려고 했다는, 흔히 볼 수 있는 에러이다.문제는 왜 두 개가 다르냐는 것인데, x += something은 객체의 iadd 메서드를 호출하는 것인데, 사실 아래의 코드가 실행된다. x = x.__iadd__(something) 여기서 assignment가 문제가 된다. 흥미로운 점은, 아래 코드는 문제 없이 잘 돈다. 여기에는 assignment가 없기 때문이다. x += something은 __iadd__를 호출하고, __iadd__는 self를 반환하므로, x += something은 x의 객체가 바뀌..
참고한 곳: 스택오버플로우 리스트 컴프리헨션(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는 그 자체로 하나의..