0

関数やメソッドを使って、変数に値を代入する方法はありますか?私はSchemeインタプリタを書いています。できれば、プロセスは大幅に簡素化されます。私はあなたが操作を行った結果され、ここで、クラス変数を使用することができます関数またはメソッドを使った代入

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

基本的な変数の割り当ては、 'x = operator.add(2,3)'のように動作しますが、あなたが意図したものではないと思います。予想される出力を持つコード行の例を提供できますか? – physicsGuy

+0

Pythonはcall-by-referenceをサポートしていないので、 'assign'は実装できません。しかし、これがどのように単純化するのかは明らかではありません。例がありますか? – molbdnilo

+0

基本的には、辞書の関数にリンクされたシンボルがたくさんあります。プログラムが '+'を読むと、それは辞書でそれを探し、2つの引数を与えます。変数定義の '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

この機能の必要性は、プログラムデザインの再考が必要なヒントになる可能性があります。

詳細は入力しませんでしたが、名前の衝突を防ぐために別の名前空間が必要な場合があります。

たとえば、この方法で割り当て可能なすべての変数は、別のモジュールであっても何らかの種類のコンテナに格納することができます。 「トリック」は必要ありません。

これらの警告の後、ここに例があります。それは、現在のモジュール内の任意の名前を(再)assingすることができます。

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

あなたは実際には、python名前空間とスキーム名前空間をマッシュしたくありません。 Python変数はインタプリタの実装の一部であり、スキーム変数は評価プログラムの一部です。あなたの仕事は、評価されたプログラムの環境をホスト言語の値を使って表現することです。辞書はおそらく良い選択だろう。しかし、あなたは実際にメインの定義を踏みにじるために 'main'という変数を定義するスキームプログラムがほしいと思っていますか?私はそうは思わない。

関連する問題