파이썬에서 함수 나 메서드를 사용하여 변수에 값을 할당하는 방법이 있습니까? 나는 Scheme 인터프리터를 작성 중이며 가능한 경우 프로세스가 크게 단순화 될 것입니다. 이것은과 같이 운영자 모듈의 기본 논리와 수학에 대해 수행 할 수 있습니다 : 당신은 클래스 변수를 사용할 수 있습니다함수 또는 메서드로 할당
>>> operator.assign(a, 5)
>>> print(a)
5
파이썬에서 함수 나 메서드를 사용하여 변수에 값을 할당하는 방법이 있습니까? 나는 Scheme 인터프리터를 작성 중이며 가능한 경우 프로세스가 크게 단순화 될 것입니다. 이것은과 같이 운영자 모듈의 기본 논리와 수학에 대해 수행 할 수 있습니다 : 당신은 클래스 변수를 사용할 수 있습니다함수 또는 메서드로 할당
>>> operator.assign(a, 5)
>>> print(a)
5
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에 저장됩니다.
값을 할당 할 변수 이름을 제공한다고 가정합니다.
샘플 코드 :
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
를이하지 않는 것이 좋습니다 그러나 여기에서 그렇게 할 수있는 방법입니다 - 이것은 호출자 범위의 값을 수정 포함됩니다
오 마이. 나는 이것이 OP의 문제에 대한 최선의 해결책이 아니라는 것을 많은 돈을 걸 것이라고 생각합니다. –
@JohnClements 나는 내기하지 않을 것이다 :) 왜냐하면 나는 당신과 동의한다. 그것은 가장 간단한 것의 한개이다. – Sharad
이 기능의 필요성은 프로그램 디자인을 다시 생각해 봐야한다는 힌트 일 수 있습니다.
세부 정보는 제공하지 않았지만 이름 충돌을 방지하려면 별도의 네임 스페이스가 필요할 수 있습니다.
예를 들어,이 방법으로 할당 할 수있는 모든 변수는 어쩌면 별도의 모듈에도 어떤 종류의 컨테이너에 저장할 수 있습니다. "트릭"이 필요하지 않습니다.
이러한 경고 이후에는 다음과 같은 예가 있습니다. 현재 모듈의 이름을 (다시) 해석 할 수 있습니다.
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
정말 정말 파이썬 네임 스페이스와 체계 네임 스페이스를 매시하고 싶지 않습니다. 파이썬 변수는 인터프리터 구현의 일부이며 스키마 변수는 평가 된 프로그램의 일부입니다. 귀하의 임무는 호스트 언어의 값을 사용하여 평가 된 프로그램의 환경을 표현하는 것입니다. 사전은 아마도 좋은 선택 일 것입니다. 하지만 실제로 main이라는 변수를 정의하는 scheme 프로그램이 필요합니까? 나는 그렇게 생각하지 않는다.
기본 변수 할당은'x = operator.add (2, 3)'와 같이 작동하지만 사용자가 의도하지 않은 것으로 가정합니다. 예상 출력과 함께 코드 줄의 예를 제공 할 수 있습니까? – physicsGuy
'assign '은 파이썬이 call-by-reference를 지원하지 않기 때문에 구현 될 수 없다. 그러나 이것이 어떻게 단순화시키는 지 분명하지 않습니다. 모범이 있습니까? – molbdnilo
기본적으로 사전에 함수에 링크 된 일련의 기호가 있습니다. 프로그램이'+'를 읽으면, 사전에서 그것을 찾고 두 개의 인자를 보낸다. 변수 정의에'define'을 할 때도 똑같은 일을하고 싶습니다. – ayNONE