2011-12-17 11 views
1

변수 이름에 액세스하려고합니다. 예를 들어, 나는 (printL) 목록을 인쇄하는 함수를 호출하여 인쇄하려면 내 목록의 이름 "A_minus_B" :변수 이름에 액세스

def printL (xlist): 
    print "****************************" 
    print "name of list" 
    print (" entries : "),len(xlist) 
    print xlist 
    print "****************************" 
    return() 

어떻게, "name of list" 대신 내가 사용하는 이름을 "A_minus_B"를 인쇄하는 기능을 얻을 수 있습니다 함수 호출 printL(A_minus_B)?

+1

그것은 도움이 될 것입니다. –

+0

죄송합니다. 이것은 파이썬 2.7에 대한 것입니다 –

+1

복제 : http://stackoverflow.com/questions/592746/how-can-you-print-a-variable-name-in-python – heltonbiker

답변

0

수 없습니다. * 자세한 이유는 Python language reference에서 논의되었지만 기본적으로 printL(A_minus_B)으로 전화 할 때 파이썬이 수행하는 작업은 A_minus_B이라는 레이블이 지정된 값을 사용하고 동일한 레이블을 사용하는 xlist이라는 새 레이블을 만듭니다. 이 시점에서 레이블 xlist은 다른 레이블 A_minus_B에 실제로 연결되어 있지 않으며 실제로는 A_minus_B 또는 xlist으로 레이블 된 값 또는 레이블을 붙이기 위해 사용 된 이름과 아무런 관련이없는 값입니다.


* 글쎄, 당신 , ... 당신은 기본적으로 당신이 printL(A_minus_B) 전화 소스 코드의 조각을 읽고 변수를 추출하는 파이썬을 말할 것이다 어떤 깊은 "파이썬 부두"를 사용하여 거기에서 이름. 일반적으로 그렇게하지 않는 것이 좋습니다 (초보자가 아니기 때문에가 아니라 프로그램을 잘못된 방법으로 설계했기 때문입니다). 그러나 디버깅은 아마도 적절한 경우 중 하나입니다.

import inspect, pprint 

def print_values(*names): 
    caller = inspect.stack()[1][0] 
    for name in names: 
     if name in caller.f_locals: 
      value = caller.f_locals[name] 
     elif name in caller.f_globals: 
      value = caller.f_globals[name] 
     else: 
      print 'no such variable: ' + name 
     # do whatever you want with name and value, for example: 
     print "****************************" 
     print name 
     print (" entries : "),len(value) 
     print value 
     print "****************************" 

캐치는이 함수를 호출 할 때, 당신은 그것에게 이름이 인쇄하고자하는 변수가 아닌 변수 자체의을 통과해야한다는 것입니다 : 여기 한 가지 방법이다. 따라서 print_values('A_minus_B')이 아니라 print_values(A_minus_B)으로 전화하십시오. 여러 개의 이름을 전달하여 모두 인쇄 할 수 있습니다 (예 : print_values('A_minus_B', 'C_minus_D', 'foo')). 그것을 할 수

+0

데이빗에게 감사드립니다. 그렇다면이 유형의 것을 어떻게 디자인해야합니까? "함수를 호출 할 때 매개 변수의 이름을 함수에 전달하십시오". listDic = { "listA": list_A, "listB": list_A} 다음 printL (listDic (mylist))을 호출하고 printL display mylist를 가질 수 있다고 가정합니다. 이 나쁜 디자인입니까? –

+0

다릅니다. 왜 변수의 이름이 필요한가요? –

+0

내 목록의 값 (디버깅의 soe 정렬)을 출력하고 함수에 전달한 목록의 이름을 출력하고 싶습니다. dictionnary 접근 방식이 효과가있는 것처럼 보입니다. 나는 listDic = { "list_A": listA, "list_B": listB} printL ("listX")를 호출하고, "listX"를 출력 한 다음 listDic [listX]를 수행하여 listX의 값을 출력한다. 이 사운드 코딩이 있습니까? 많은 thanks Thomas –

0

대체 방법 : 당신은 당신이 사용중인 언어 알려 경우

list_dict = {}  #creates empty dictionary 
list_dict['list_a'] = [1,2,3,4,5,6] # here you create the name (key) 
nice_name = 'list_b' 
list_dict[nice_name] = [7,8,9,10,11,12] # here you use already existing string as name (key) 

def list_info(ld): 
    for key in sorted(ld): 
     print "****************************" 
     print key 
     print " entries : " ,len(ld[key]) 
     print ld[key] 
     print "****************************" 

list_info(list_dict) 
관련 문제