2014-11-15 10 views
0

클래스의 노트가 있지만 실제로 무슨 일이 일어나는지 확신 할 수 없습니다. 혼란에 추가하는 것 이외에 섀도 잉이 할 수있는 목적은 무엇입니까? 왜냐하면 globalString은 수정할 수없는 문자열 유형이기 때문입니다. 원래 값에 어떻게 액세스합니까? 기억이란 무엇인가의 실례는 무엇입니까?글로벌 변수와 함께 섀도 잉을 사용하는 방법은 무엇입니까?

globalList = [1,2,3] 
globalString = "global"  # can't be modified because it's a string 

def updateGlobalString(): 
    global globalString  # Does line this do anything? 
    globalString = "new" 

print(globalString) 
>>> "global" 
updateGlobalString() 
>>> "new" 

def updateGlobalList(): 
    globalList.append(4) 

print(globalList) 
>>> [1,2,3] 
updateGlobalList() 
print(globalList) 
>>> [1,2,3,4] 

파이썬리스트가 변경 가능한 경우이 예제가 문자열과 비교할 때 방정식을 어떻게 변경합니까? 그리고 명확히하기 위해,이 값들은 실제적인 글로벌입니까?

감사합니다.

답변

1

글로벌은 변수가 글로벌 공간에서 발생한다는 것을 의미합니다. 따라서 1 st 함수는 전역 네임 스페이스의 이전 문자열을 삭제하고 새 네임 스페이스로 바꿉니다. 그러나 목록은 변경 가능하며 직접적인 결과는 전역 범위 외부에서 변경할 수 있습니다.

2

그림자 처리는 기법이나 도구가 아니며 단순히 파이썬의 범위 지정 규칙의 결과입니다.

변수가 전역 변수인지 여부에 대해 혼란스러워합니다. 모듈 수준에서 선언 된 것은 모두 전역입니다. global 키워드를 비전 역 영역에서 사용할 경우 이름을 다른 객체로 리바 인딩하고 해당 리 바인딩을 전역 범위에서도 적용 할 수 있습니다. 그렇지 않으면 단순히 로컬 범위에서 새 변수를 정의하는 것입니다. 원래 변수를 음영 처리합니다).