は、我々はfoo()
Pythonでの参照渡しをどのようにシミュレートできますか?
def foo():
foo.a = 2
foo.a = 1
foo()
>> foo.a
>> 2
機能は、このニシキヘビですか、私はそのようなリストのように変更可能なオブジェクトに変数をラップする必要があるとしましょうか?
例:
a = [1]
def foo(a):
a[0] = 2
foo()
>> a
>> 2
は、我々はfoo()
Pythonでの参照渡しをどのようにシミュレートできますか?
def foo():
foo.a = 2
foo.a = 1
foo()
>> foo.a
>> 2
機能は、このニシキヘビですか、私はそのようなリストのように変更可能なオブジェクトに変数をラップする必要があるとしましょうか?
例:
a = [1]
def foo(a):
a[0] = 2
foo()
>> a
>> 2
あなたは名前a
がグローバル変数であることをあなたの関数を伝えるためにglobal
キーワードを使用する「の変更も同様にグローバルスコープで行われるように変数を変異させたい」ので。つまり、関数内のa
への割り当ては、グローバルスコープに影響します。 global
宣言がなければ、関数内のa
に新しいローカル変数が作成されます。
>>> a = 0
>>> def foo():
... global a
... a = 1
...
>>> foo()
>>> a
1
'foo.a'が' foo'が関数名であるところが何を意味するのかについても説明できますか?例1(質問に記載)は可変変数のように機能しますか? – yask
@yask:Python関数は呼び出し可能なオブジェクトです。オブジェクトなので、ドット表記法( 'foo.a = 2'など)を使って属性を追加することができます。これは合法ですが、一般的ではありません(まったく珍しいことではありません)。あなたが望むものと状態をペアにする必要がある場合は、クラスを宣言することです。 –
@StevenRumbalski '' a''はあなたの例では属性ではありませんが、これは誤解を招く可能性があります。 – jbndlr
クラス(多分ビットやり過ぎ)を使用してください:あなたの目標は何ですか
class Foo:
def __init__(self):
self.a = 0
def bar(f):
f.a = 2
foo = Foo()
foo.a = 1
bar(foo)
print(foo.a)
'Foo .__ init__'で' self.a = 0'を意味すると思いますか? –
修正。私のコードを修正しました。 – Oxben
を?呼び出しスコープ内のオブジェクトを変更しますか?グローバルスコープでは?他に何か? –
グローバルスコープでも変更が反映されるように変数を変更したいと思います。 また、私は 'function_name.a'(Eg1)が何を意味しているのか、それはなぜ可変オブジェクトをシミュレートするのですか? – yask
この項目もチェックしてください:http://stackoverflow.com/questions/39975659/python-27-how-to-fix-store-a-value-to-a-method-to-preserve-its-interface/39975900#39975900 – jbndlr