2012-01-10 5 views
5

파이썬에서 메서드의 기본 인수 값에 프로그래밍 방식으로 액세스하려면 어떻게해야합니까? 예를 들어,이 파이썬에서 기본 인수 값에 액세스

def test(arg1='Foo'): 
    pass 

가 어떻게 문자열 test 내부 'Foo'에 액세스 할 수 있습니다 다음에?

+1

파이썬 3에서 제거되었을 수 있습니다? – Kevin

+0

그냥'arg1'을 타이핑하는 것이 아니라는 것을 의미합니까? –

+0

'test'를 호출 할 때'arg1'을 제공하지 않으면'arg1'은''Foo''의 기본값이 될 것입니다 – TyrantWave

답변

14

그들은들입니다

+0

+1 : 이거! 그것은 작동합니다. –

2

오른쪽에 Ricardo Cárdenes가 있습니다. 사실 testtest 안에있는 함수에 점점 더 까다로울 수 있습니다. inspect 모듈을 추가로 얻을 것이다, 그러나 추한 될 것입니다 : 그것은 밝혀으로 Python code to get current function into a variable?

, 당신은 함수 내에서 test를 참조 할 수 있습니다 :

def test(arg1='foo'): 
    print test.__defaults__[0] 

foo을 인쇄합니다. 그러나 단 한 test 실제로 정의 된대로 작동합니다 test로 다스 려하는 것은 : 당신이 주변에이 기능을 전달에하려는 경우

>>> test() 
foo 
>>> other = test 
>>> other() 
foo 
>>> del test 
>>> other() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in test 
NameError: global name 'test' is not defined 

그래서, 당신은 정말 inspect 경로 :(

+0

필자는 그 인상 아래에서도'test'가 내 답변에 대한 Ricardo의 코멘트에서 지적한대로'test'의 지역 범위에있는 것으로 나타났습니다. –

+0

알기 좋은 곳! 반영하기 위해 내 대답을 업데이 트했습니다! –

+1

def test2() : print locals(), '\ n \ n', globals()'를 실행하면'test2'가 전역에있는 것을 볼 수 있습니다. –

0

이 이동해야 할 수도 있습니다 (전혀)없는 매우 우아하다, 그러나 당신이 원하는 것을 수행합니다.

def test(arg1='Foo'): 
    print(test.__defaults__) 

test(arg1='Bar') 

너무 파이썬 3.x를 작동

+2

왜'globals()'입니까? 'test'는 그 자체의 범위에 국한되어 있습니다. –

+0

@ RicardoCárdenes, 네 말이 맞아. 나는 그것을 몰랐다. 고마워. 지금 고치세요. –

4

test.func_defaults에 tored 고려 :

def test(arg1='Foo'): 
    pass 

In [48]: test.func_defaults 
Out[48]: ('Foo',) 

.func_defaults는 인수가 코드에 나타나는 순서대로 순서로 당신에게 기본 값을 제공합니다.

분명히, func_defaults은 당신이 당신이 작업을 수행 할 수 있습니다 이유를 설명하는 예제를 제공 할 수

+4

'func_defaults'는 파이썬 2.x에서만 작동한다고 생각합니다. '__defaults__'는 파이썬 2.7과 3.2에서 작동하는 것 같습니다. –

+0

@RobWouters : 알아두면 좋지만 Python 3을 사용하지는 않습니다. – Marcin