2014-10-30 3 views
-1

이미 정의한 함수의 변수 이름을 변경하고 싶습니다. 결국 그것은 다음과 같아야합니다 :런타임에 기존 함수의 변수 이름을 변경하십시오.

def f(a=1): 
    return a 

#insert your code here  

print f(variable_name_different_from_a = 2) 

이 코드는 숫자 2를 인쇄해야합니다. 그러나 이것은 가능합니까?

편집 : 제 질문은 실제로 문자 그대로의 의미였습니다. 파이썬에서는 많은 이상한 것들이 가능하며, 나는 종종 가장 많이 배우는 이상한 것들입니다. 또한 이에 대한 유스 케이스가 있지만 그 중 하나는 아마도 덜 고통스럽게 해결 될 수 있습니다.

+4

이 작업을 수행 하시겠습니까? –

+0

그냥 "print f (2)"하지 않는 이유는 무엇입니까? –

+0

아마 당신은 단순히 : variable_name_different_from_a = 2; f (variable_name_different_from_a)'? –

답변

1

새로운 인수의 이름이 사전에 알고있는 경우 :

을 대신 (모든 가능한 경우) 좋은 아이디어 같은 소리하지 않는 기존의 함수 객체를 수정, 당신은에 f을 다시 정의 할 수 있습니다 새로운 인수의 이름 하지 알고 난 경우

# insert this code there 
_orig_f = f 
def f(variable_name_different_from_a): 
    return _orig_f(variable_name_different_from_a) 

: 원래 기능의 래퍼 수

이 어떤 1, 인수 기능이 작동
new_varname = raw_input('Enter var name') 
def f(*a, **kw): 
    if new_varname in kw and 'a' not in kw: 
     kw['a'] = kw.pop(new_varname) 
    return _orig_f(*a, **kw) 

는, 위치 또는 키워드 중 하나를 사용하여 호출 할 때 : N의 발전 :

래퍼 위의 포장 기능에 전달하기 전에 *a, **kw을, 그들을 manipulte 수 있습니다 args.

+0

이것은'f'를 재정의하기 때문에 일종의 부정 행위입니다. 그렇게하지 않으면 불가능하지 않으면. –

+0

@AlexThornton 재정의하는 것이 잘못 되었나요? 질문을 문자 그대로 사용하지 않는 한. – shx2

+0

나는 단지 단어의 선택에 기초하고있다 : '이미 정의 된'. –

관련 문제