0

파이썬에서 함수 나 메서드를 사용하여 변수에 값을 할당하는 방법이 있습니까? 나는 Scheme 인터프리터를 작성 중이며 가능한 경우 프로세스가 크게 단순화 될 것입니다. 이것은과 같이 운영자 모듈의 기본 논리와 수학에 대해 수행 할 수 있습니다 : 당신은 클래스 변수를 사용할 수 있습니다함수 또는 메서드로 할당

>>> operator.assign(a, 5) 
>>> print(a) 
5 
+0

기본 변수 할당은'x = operator.add (2, 3)'와 같이 작동하지만 사용자가 의도하지 않은 것으로 가정합니다. 예상 출력과 함께 코드 줄의 예를 제공 할 수 있습니까? – physicsGuy

+0

'assign '은 파이썬이 call-by-reference를 지원하지 않기 때문에 구현 될 수 없다. 그러나 이것이 어떻게 단순화시키는 지 분명하지 않습니다. 모범이 있습니까? – molbdnilo

+0

기본적으로 사전에 함수에 링크 된 일련의 기호가 있습니다. 프로그램이'+'를 읽으면, 사전에서 그것을 찾고 두 개의 인자를 보낸다. 변수 정의에'define'을 할 때도 똑같은 일을하고 싶습니다. – ayNONE

답변

0
class Sample: 

    res = None 

    def Add(self, x, y): 
     self.res = x + y 

obj = Sample() 
obj.Add(2, 3) 
print obj.res 

을 무엇을 의미하는지의

>>> operator.add(2, 3) 
5 

예는, 여기에 작업을 수행하고 결과입니다 클래스 변수 res에 저장됩니다.

0

값을 할당 할 변수 이름을 제공한다고 가정합니다.

샘플 코드 :

import inspect 
def assign(var_name, value): 
    inspect.stack()[1][0].f_locals[var_name] = value 

try: 
    print("a={}".format(a)) 
except Exception as err: 
    print("ERROR: {}".format(err)) 

assign('a', 10) 

try: 
    print("a={}".format(a)) 
except Exception as err: 
    print("ERROR: {}".format(err)) 

실행 출력 :

ERROR: name 'a' is not defined 
a=10 
를이하지 않는 것이 좋습니다 그러나 여기에서 그렇게 할 수있는 방법입니다 - 이것은 호출자 범위의 값을 수정 포함됩니다
+0

오 마이. 나는 이것이 OP의 문제에 대한 최선의 해결책이 아니라는 것을 많은 돈을 걸 것이라고 생각합니다. –

+0

@JohnClements 나는 내기하지 않을 것이다 :) 왜냐하면 나는 당신과 동의한다. 그것은 가장 간단한 것의 한개이다. – Sharad

0

이 기능의 필요성은 프로그램 디자인을 다시 생각해 봐야한다는 힌트 일 수 있습니다.

세부 정보는 제공하지 않았지만 이름 충돌을 방지하려면 별도의 네임 스페이스가 필요할 수 있습니다.

예를 들어,이 방법으로 할당 할 수있는 모든 변수는 어쩌면 별도의 모듈에도 어떤 종류의 컨테이너에 저장할 수 있습니다. "트릭"이 필요하지 않습니다.

이러한 경고 이후에는 다음과 같은 예가 있습니다. 현재 모듈의 이름을 (다시) 해석 할 수 있습니다.

import sys 

this_module = sys.modules[__name__] 

def assign(name, value): 
    setattr(this_module, name, value) 

a = 1000 
assign('b', a + 3) 
print(b) # 1003 
1

정말 정말 파이썬 네임 스페이스와 체계 네임 스페이스를 매시하고 싶지 않습니다. 파이썬 변수는 인터프리터 구현의 일부이며 스키마 변수는 평가 된 프로그램의 일부입니다. 귀하의 임무는 호스트 언어의 값을 사용하여 평가 된 프로그램의 환경을 표현하는 것입니다. 사전은 아마도 좋은 선택 일 것입니다. 하지만 실제로 main이라는 변수를 정의하는 scheme 프로그램이 필요합니까? 나는 그렇게 생각하지 않는다.