복붙노트

[PYTHON] 파이썬에서 지역 주민이 네임 스페이스를 호출하지 못하도록합니다.

PYTHON

파이썬에서 지역 주민이 네임 스페이스를 호출하지 못하도록합니다.

파이썬에서 호출 된 함수에서 로컬 변수를 가져 오려고합니다. 이 일을 할 수있는 방법이 있습니까? 나는 이것이 대부분의 프로그래밍에 적합하지 않다는 것을 알고 있지만, 기본적으로 디버거를 만들고있다. 예 :

def show_locals():
  # put something in here that shows local_1.

local_1 = 123
show_locals()  # I want this to show local_1.

show_locals의 본문에 무엇을 넣을 까? 호출 문을 수정해야한다면 최소한의 수정은 무엇입니까?

주의 : show_locals가 호출자와 다른 모듈에있을 때 이것이 작동해야합니다.

해결법

  1. ==============================

    1.디버거를 작성하는 경우 inspect 모듈을 많이 사용하는 것이 좋습니다.

    디버거를 작성하는 경우 inspect 모듈을 많이 사용하는 것이 좋습니다.

    def show_callers_locals():
        """Print the local variables in the caller's frame."""
        import inspect
        frame = inspect.currentframe()
        try:
            print(frame.f_back.f_locals)
        finally:
            del frame
    
  2. ==============================

    2.당신은 파이썬 내장, dir () 또는 vars ()를 사용합니다 :

    당신은 파이썬 내장, dir () 또는 vars ()를 사용합니다 :

    바르 (물체)

    dir ()을 사용하는 예제는 다음을 참조하십시오.이 게시물

    vars를 사용하는 예제 :

    >>> class X:
    ...     a=1
    ...     def __init__(self):
    ...         b=2
    ... 
    >>> 
    >>> vars(X)
    {'a': 1, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x100488848>}
    >>> 
    >>> vars(X())
    {}
    

    잠재적으로 문제가되는 사실 : 새로운 스타일 클래스는 동일한 결과를 반환하지 않습니다.

    >>> class X(object):
    ...     a=1
    ...     def __init__(self):
    ...         b=2
    ... 
    >>> 
    >>> vars(X)
    <dictproxy object at 0x1004a1910>
    >>> vars(X())
    {}
    

    또한 인스턴스화 된 클래스 (새롭고 오래된 스타일)의 경우 인스턴스화 한 후에 변수를 추가하면 vars가 다음과 같이 객체의 dict을 반환합니다.

    >>> x = X() 
    >>> x.c = 1
    >>> vars(x)
    {'c': 1}
    >>> 
    

    참조 : http://docs.python.org/library/functions.html#vars

  3. from https://stackoverflow.com/questions/6618795/get-locals-from-calling-namespace-in-python by cc-by-sa and MIT license