2017-01-10 7 views
0

파이썬 코드에 전역 변수가 거의 없습니다. 그런 다음 set 함수를 사용하여 해당 값을 설정하고 get 함수를 통해 해당 값을 가져 오려합니다. 예를 들어파이썬에서 값 가져 오기 및 설정

는 :

a = None #global variable1 

b= None #global variable2 

def set(var, value): 
    var = value 

def get(var): 
    return var 

set(a, '1') 
get(b, '2') 

나는 일반적인 GET 및 글로벌 변수에 대해이 작업을 수행합니다 설정 기능을 갖고 싶어. 어떻게하면 파이썬에서이 작업을 수행 할 수 있습니까? 여기에 쓰여진 코드는 오류를 발생시킵니다.

답변

-1

문자열 이름으로 변수 이름을 전달하려는 경우 globals() 함수를 사용하면됩니다. 비록 당신이 할 수 있다고하더라도, 나는 그것이 좋은 생각이라고 생각하지 않습니다.

먼저, 여기 당신이 그것을 할 수있는 방법은 다음과 같습니다 즉, 당신은 아마 다른 뭔가 그림자하지 않는 내장 타입이기 때문에 내가 이름 set을 사용하지 않는

def get_var(var_name): 
    return globals()[var_name] 

def set_var(var_name, value): 
    globals()[var_name] = value 

.

set_var("foo", 1) 

bar = get_var("foo") 

print(foo, bar) # prints 1 1 

그래서 작동하지만, 이러한 기능이 필요 정말 없습니다 :

당신은 좋아하는 전화 것입니다. 대신 일반 구문을 사용하여 전역 변수를 할당하거나 가져올 수 있습니다. set_var("foo", 1) 대신 foo = 1을 사용하십시오 (함수에서 수행하는 경우 global foo 먼저 입력하십시오). 전역 변수를 얻는 것은 (예 : print(foo)에서와 같이) 이름을 지정하는 것만 큼 간단합니다.

변수 이름을 미리 모르는 경우 이름과 값을 전역 변수로 작성하는 대신 사전에 넣어야합니다. 변수 이름은 프로그래머가 사용할 수 있습니다. 그들은 데이터가 아닙니다!

+0

이것은 작동하지 않습니다. 나는 전역으로 선언 된대로 a와 b의 가치를 얻었습니다. 복귀 전역() var_name 반] DEF set_var (var_name 반, 값) : 전역() var_name 반 = 값 I이 'A =' B = ' DEF get_var (var_name 반) 좋아했다 set_var (A, '1') get_var (A) 를 인쇄 set_var (B, '2') –

+0

b' get_var (b)에 인쇄 당신이 get_var' 또는'set_var', 당신이 필요로하는'전화 이름을 따옴표로 묶는 것. 그렇지 않으면 변수의 이전 값을 문자열로 전달하지 않고 함수에 전달하게됩니다. – Blckknght

+0

그것은 효과가 있었다. 왜 그렇게 좋은 생각이 아닌가[email protected] –

0

파이썬은 "참조로 호출"하지 않고 "값으로 호출"합니다. 의미는 "set (a, '1')"을 호출하면 "a"값을 "set"함수에 전달하는 것입니다. "set"의 변수 "var"는 함수 자체에 대한 로컬 변수이며 전역 변수 "a"에는 영향을 미치지 않습니다. 당신은 setter 및 getter 메소드에 전역 변수에 대한 액세스 권한을 부여해야합니다. 그것들을 모두 클래스 객체의 일부로 만들어서 할 수 있습니다.

+2

파이썬이 어떻게 작동하는지 설명 할 때 "가치에 의한 호출"과 "참조에 의한 호출"이라는 용어를 사용하는 것은 매우 신중할 것입니다. C++과 같은 두 언어를 지원하는 언어로 호출 스타일 중 하나와 동일하게 작동하지 않습니다. 내가 좋아하는 설명은 "포인터 값으로 전달"입니다. 각 인수는 객체에 대한 포인터이며 함수에 전달 될 때 해당 포인터는 값 (복사 됨)으로 전달됩니다. 따라서 포인터를 다시 바인딩하고 호출 코드에 반영하도록 할 수는 없지만 참조 된 개체를 제 위치에서 변경하면 해당 변경 내용이 함수 외부에서 볼 수 있습니다. – Blckknght