dir() 해보면 호출가능한 함수들 쭉 나오던데요...
그 함수이름을 이용해서 실제 함수호출이 가능할까요?
찾아봐도 잘 안보여서...^^;;
될꺼같기도 하고...안될꺼같기도하고 갸우뚱;;
좀 억지스러운 면이 있지만...
>>> lst = [ "hello", "world" ]] >>> lst ['hello', 'world'] >>> repr(lst) "['hello', 'world']" >>> repr <built-in function repr> >>> f = eval("repr") >>> f <built-in function repr> >>> apply(f, [lst]) "['hello', 'world']" >>> _
-- C FAQ: http://www.eskimo.com/~scs/C-faq/top.html Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html Korean Ver: http://cinsk.github.io/cfaqs/
eval로도 가능하지만.. 이렇게도 가능하겠군요.
다른 방법은 또 없을라나요?
>>> def foo(): ... print "Hello world!" ... >>> locals()['foo']() Hello world!
>>> d = {1:'a',2:'b'} >>> dir(d) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] >>> foo = dir(d)[-1] >>> foo 'values' >>> bar = getattr(d, foo) >>> bar() ['a', 'b']
__dict__ 를 사용하면 될꺼같은데요. 만약 인터프레터에서 나가고 싶으면 exit() 을 처도 되지만, __buitlins__.__dict__["exit"]() 을 처도 나가집니다. ㅎㅎ. 다른 예로...
>>> class Foo: ... def bar(self): ... print "Hello, world" ... >>> a = Foo() >>> a.bar() Hello, world >>> Foo.__dict__ {'__module__': '__main__', 'bar': <function bar at 0x01B0CEB0>, '__doc__': None} >>> Foo.bar(a) Hello, world >>> Foo.__dict__['bar'](a) Hello, world >>>
이 코드에선 a.bar(), Foo.bar(a), 와 Foo.__dict__['bar'](a) 가 다 같은 뜻을 가집니다 ㅎㅎ. 만약 문자열을 가지고 함수를 부르고 싶으면 __dict__['문자열'] 을 해버리면 되겟군요.
답변 주신분들 감사합니다 ^^
python...스크립트 언어라서 그런지 재밌는 부분이 많네요 ㅎㅎ
------------------------------------------ Let`s Smart Move!!http://kalstein.tistory.com/
getattr, locals 같은 거 써보세요.
getattr
locals
http://en.wikipedia.org/wiki/Reflection_(computer_science)#Python
>>> [type(eval(x)) for x in dir()]
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
좀 억지스러운 면이
좀 억지스러운 면이 있지만...
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
locals
eval로도 가능하지만..
이렇게도 가능하겠군요.
다른 방법은 또 없을라나요?
getattr 이 있습니다.
__dict__ 를 사용하시면 될꺼같은데요.
__dict__ 를 사용하면 될꺼같은데요.
만약 인터프레터에서 나가고 싶으면 exit() 을 처도 되지만,
__buitlins__.__dict__["exit"]() 을 처도 나가집니다. ㅎㅎ.
다른 예로...
이 코드에선 a.bar(), Foo.bar(a), 와 Foo.__dict__['bar'](a) 가 다 같은 뜻을 가집니다 ㅎㅎ. 만약 문자열을 가지고 함수를 부르고 싶으면 __dict__['문자열'] 을 해버리면 되겟군요.
답변 주신분들
답변 주신분들 감사합니다 ^^
python...스크립트 언어라서 그런지 재밌는 부분이 많네요 ㅎㅎ
------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/
------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/
getattr, locals 같은 거
getattr
,locals
같은 거 써보세요.Reflection in Python
http://en.wikipedia.org/wiki/Reflection_(computer_science)#Python
dit()를 이용한 사례
>>> [type(eval(x)) for x in dir()]
dit()를 이용한 사례
>>> [type(eval(x)) for x in dir()]
댓글 달기