IRC에서 후배 nezy군이 C++의 &인자와 같은 참조에 의한 호출은 어떻게 하냐고 물어봐서, 오기로 한번 만들어 봤습니다. 안 될게 뭐 있어!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import re re_loadname = re.compile('LOAD_NAME\s+[0-9]+\s+\(([a-zA-Z0-9_]+)\)') def set_refobj(argorder, value): import inspect, dis, sys, StringIO frame = inspect.stack()[2] sys.stdout, saved_stdout = StringIO.StringIO(), sys.stdout dis.dis(frame[0].f_code) disresult = sys.stdout.getvalue().split('\n\n') sys.stdout = saved_stdout for linedump in disresult: if int(linedump.split()[0]) == frame[0].f_lineno: varnam = re_loadname.findall(linedump)[argorder] frame[0].f_locals[varnam] = value def yay(x, y): set_refobj(1, x ** 2) set_refobj(2, y / 2) t = 7 r = 8 yay(t, r) print t, r |
결과 값으로 “49 4″가 나옵니다. t와 r이 yay 함수에서 계산된 값으로 세팅된 것~ 🙂
(주의사항): 이 소스는 그냥 장난이지 실제로 이렇게 쓰시기를 추천하는 것은 아닙니다.;;;
하아.. =_=;; 어쨌든 땡큐요;; 안써야지 -.-
그냥 리턴합시다 ‘o’/
(요새 코멘트가 잘 안 달려서 코멘트 달아주는 사람들한테 무지 감사;;)
힝, 이쁨받고픈 맘엥^^;(푸퍼퍽)
저는 원래 이뻐서 코멘트를…으음
call by reference의 유혹은 끊이지 않더군요..
ㅜㅜ