잡동사니

반응형

질문

실행중인 코드 로컬 x가 전역을 덮어 쓰지 않는 이유 엑스?

x = 'global x'

def test():
    global x
    x = 'local x'
    print(x)

print(x)
test()

산출:

global x

local x

답변1

그렇다고 생각합니다. 먼저 전역 x 인 x를 print합니다. 그 후 test를 호출하고 함수 끝에 로컬 x를 print합니다. 함수를 정의한다고해서 호출되는 것은 아닙니다.비 테스트 함수로 전역 x를 덮어 쓰려면 다음을 시도하십시오.

test()

print(x)

대신에

print(x)

test()


답변2

test함수가 호출되기 전에 x = 'global x'는 문제가되지 않습니다.

당신이 원하는 것 같아요

x = 'global x'

def test():
    global x
    x = 'local x'
    print(x)

print(x) # Before test call, x = 'global x'
test() # test called, x = 'local x'
print(x) # test called, x overwriting, x = 'local x'


답변3

함수 호출 후에 만 변수를 교체하고 테스트를 교체하고 마지막 두 줄을 print (x)하면 마법을 볼 수 있습니다.

x = 'global x'

def test():
    global x
    x = 'local x'
    print(x)

test()
print(x)


답변4

내가 실행하는 코드는 왜 로컬 x가 전역 x를 덮어 쓰지 않습니까?

함수 코드는 호출 할 때까지 실행되지 않습니다. 다음은 script의 이벤트 순서입니다.

  1. 변수 x 는 값이 global xstr유형의 객체를 저장하여 선언됩니다.
  2. 인터프리터는 test함수의 정의를 파싱하지만 실행하지는 않습니다.
  3. print 를 사용하여 x 의 값을 print합니다.
  4. 함수를 호출하고 전역 변수 x local x 로 설정합니다.

print하기 전에 변수 x 의 값을 변경하려는 경우. 이 작업을 수행:

x = 'global x'

def test():
    global x
    x = 'local x'
    print(x)

print("Value of x before test:", x)
test() 
print("Value of x after test:", x)

출력 :

Value of x before test: global x
local x
Value of x after test: local x


 

 

 

 

출처 : https://stackoverflow.com/questions/63048488/why-isnt-my-local-variable-overwriting-the-global

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band