파이썬에서의 = 연산자

프로그램을 만들다 보면 “=”기호를 많이 사용하게 된다. VB에서 =는 2가지 작용을 하는데, 한가지는 양 변에 있는 두 존재를 비교하여 같은지 다른지 판단한 후 참/거짓을 알려준다. 다른 하나는 오른쪽에 있는 존재의 값을 왼쪽에 있는 존재에게 넣어준다.

C언어에서 =는 1가지 작용을 한다. 오른쪽에 있는 존재의 값을 왼쪽에 있는 존재에게 넣어준다. C언어에서 양 변에 있는 두 존재가 같은지 비교하는 연산자는 ==이다.

파이썬에서도 =기호는 두가지 작용을 한다. 오른쪽에 있는 존재의 값을 왼쪽에 있는 존재에게 넣어주거나, 오른쪽에 있는 존재를 왼쪽에 있는 존재와 같은 놈으로 만들어 준다. 파이썬에서도 양 변에 있는 두 존재가 같은지 비교하는 연산자는 ==이다.

예를들어

a = 1

b = a

a = 11

print(a)

print(b)

이런 프로그램을 실행시키면 파이썬의 출력은

11

1

이 된다. 즉, 이 경우에는 변수 a의 값이 변수 b로 복사되고, a와 b는 아무 관련 없는 모르는 사이가 되었다. a를 바꾸더라도 b는 변하지 않는다.

그런데

a = [10,20]

b = a

a[1]=11

print(a)

print(b)

위와 같은 프로그램을 실행시키면 출력은

[10, 11]

[10, 11]

이 된다. 이 경우에는, a와 b가 완전히 같은 존재가 되어 a를 바꾸면 b도 바뀌게 된다. 만약 a를 b로 복사해서 넣고 싶다면 copy 모듈을 불러와야 한다.

import copy

a = [10,20]

b = copy.copy(a)

a[1]=11

print(a)

print(b)

이렇게 하면 b는 a의 내용을 복사해서 받은 존재가 되어 a가 변해도 b는 변하지 않는다. (반대도 마찬가지) 따라서 이 프로그램의 출력은 다음과 같다.

[10, 11]

[10, 20]

아무튼. 직관적인 내용이므로 알면 편한데 문서 대충 읽고 개발하는 내게는 충격적이었다. 이게 왜 바뀌지? 싶은거…

물론 이런식으로 존재 자체에 대한 =연산자는 VB나 C/C++에는 없다. 별다른 생각 없이 직관적으로 =연산자를 사용해서 존재에 존재를 연관시키는 것이 장점이긴 한데, 존재의 종류에 따라 작동이 달라지는 것은 일관적이지는 않은 행동인것 같다. (물론, +연산자도 문자열 변수와 수치형 변수에 대해 다르게 작동하며 이것도 일관적인 행동은 아니다. 다만 직관적인 행동이다.)

얼마나 대충 살면 적당할까?


http://blog.aladin.co.kr/sanga/4740583

“영원히 살 것 처럼 배우고 내일 죽을것 처럼 살아라” 라는 말이 있다. 누가 했는지 그 말 참 멋있다. 그러나 그렇게 살기는 좀 힘들어 보인다.

아무리 생각해도 내가 내일 죽을 것 같진 않기 때문이다. (영원히 살 것 같지도 않다.) 극단적으로 치열한 삶의 한 단면이랄까.

어느정도로 적당히 살면 적당할까? 어차피 죽긴 죽을텐데 말이다.

내 생각에는, 100년 정도 살 것 처럼 배우고, 한 5년후에 죽을 것 처럼 살면 적당하지 않을까 싶다.

이런 생각의 반대쪽 극단에는 영원히 살 것처럼 그냥 살고, 내일 죽을 것 처럼 배우는 것이 있겠다. 잘 생각해보면 이것도 그렇게 사는 것이 가능하기만 하다면, 뭔가 그럴듯하게 느껴진다.

어떻게 살 것인가. 정하는 것도 본인의 몫이고 지키는 것도 본인의 몫이며 바꾸는 것도 본인의 몫이다.

문제는 해결

해결을 하긴 했다.

self.wxImg = wx.EmptyImage(pilImg.size[0], pilImg.size[1])

for i in range(1024):

for j in range(1024):

x = int(f.getData()[0][j][i]/256)

self.wxImg.SetRGB(i, j, x, x, x)

이제 문제는, 너무 느리다는거…-_-;

파이썬의 단점

아… 막막함이여.

이제 파이썬 프로그램을 다른 컴퓨터에 설치해서 실행시켜야 하는데 문제가 있다. 사용하는 라이브러리들을 전부 복사해서 넣어줘야 한다는 것이다.

이게 왜 문제냐면, 그 컴퓨터는 인터넷에 연결이 되지 않기 때문이다.

dll파일 몇개로 해결될 수준이 아닌거임.

일단은, 내 컴퓨터에 설치된 파이썬의 디렉토리를 통째로 복사해서 넣으면 될 것 같긴 하다. 다행히 200MB밖에 안되네.

컴파일되지 않으니 항상 인터프리터가 있어야 하고, 다른 라이브러리를 썼으면 그것도 같이 줘야 한다. 프로그램 자체는 200줄밖에 안되는데 딸려가는 놈이 더 많은 괴이한 경우. (VB.net도 그렇지만, 그건 닷넷 프레임워크 하나만 설치하면 되는데, 파이썬은 파이썬 인터프리터와 사용된 라이브러리 전부를 다 설치해야 한다.)

결과물

어찌어찌 삽질을 했는데

이것은 무엇이란 말인가…

1. 원본이 이상하다

2. 프로그램이 이상하다

현재는 1번을 강하게 의심중. 근데 원본을 만든 그 프로그램이 내 컴퓨터에 설치되어 있지 않아서 실험실에 가서 봐야 한다. 내일 출근해야하나…-_-

삽질이 끝나지 않아

형 지정을 미리 하지 않고 실행시에 판단하는 동적 바인딩 언어는 앞으로 안좋아할 것 같다. (쓰고 안쓰고를 떠나서.)

일단 뭐가 틀렸는지 알 수가 없다. 난 분명히 문서에 써 있는대로 함수에 넣으라고 한 놈을 “넣은 것 같은데” 안 맞는다고 에러.

문서에 보면 “이 함수의 리턴은 image이다”라고 되어 있는데 실제로 해보면 str로 리턴. 에러.

파이썬은 거기에 들여쓰기를 계속 넣었다 뺐다 해야 한다. for나 if를 넣었다 뺐다 하는 경우에도 블럭 전체의 들여쓰기를 넣었다 뺐다 해야 한다. 불편하다.

애초에 처음 배우는 언어로 사용중 실시간 코딩을 해보겠다고 한 내가 미친놈이고 죄인이지.

파이썬이 나한테 욕먹는건 분명 내 개인 사정때문인데, 그래도 욕은 해야겠다. 파이썬 싫다.

누가 좀 개발해줘……

괴이한 오류

PIL로 작업중인데

Image.fromstring() 메소드는 분명 str을 받아다가 image로 만들어 주는 거라고 들었다.


http://www.pythonware.com/library/pil/handbook/image.htm

그래서 이렇게 썼다.

self.wxImg = Image.fromstring(“L”, (f.getData().shape[1],f.getData().shape[2]), t.tostring()).convert(‘RGB’).tostring()

근데

self.wxBmp2 = self.wxImg.ConvertToBitmap()

이렇게 썼더니 “str은 ConvertToBitmap같은거 모른다”는 에러를 내뱉는다.

뭐여…-_-

PIL문서에서 구라친겨?

삽질좀 끝내자…제발…

노란색


http://popsci.hankooki.com/popsci_news/view.php?news1_id=7628

빛은 삼원색만 있는게 아니요…

노란색이 다 같은 노란색이 아니고, 두 파장의 빛이 섞인 경우도 있고 한 파장의 빛으로만 이루어진 경우도 있겠지.

둘이 섞인거라면 붉은 유리를 통과한 후에 붉은색과 노란색을 구별할 수 없겠지만, 단일 파장으로 이루어진 경우라면 붉은 유리를 통과한 후에도 붉은색과 노란색을 구별할 수 있을 것이다.

앞부분에는 제대로 된 과학적 사실을 적어두고서 막판에 반전이 있는 기사를 쓴건지 모르겠다.

할 수 있냐

상사의 할 수 있느냐는 질문에서 “할 수 있다”는 말의 의미는 최종적인 결과물을 낼 수 있느냐는 뜻이다. 능력이 있느냐는 질문이 아니므로 오해하지 말 것. 능력이 있어도 시간이 없으면 못하는 것이고, 상사 입장에서는 못한거다.