[解決済み] Pythonの関数が参照で呼び出される
質問
いくつかの言語では、以下のような特別な予約語を使って、パラメータを参照または値で渡すことができます。 参照 または val . Pythonの関数にパラメータを渡した場合、関数から離れるときにパラメータの値が変更されることはありません。 グローバル という予約語を使うしかありません(というか、私は現在そう理解しています)。
例 1:
k = 2
def foo (n):
n = n * n #clarity regarding comment below
square = n
return square
j = foo(k)
print j
print k
が表示されます。
>>4
>>2
はkが変化していないことを示す。
この例では、変数nは変更されません
例2:
n = 0
def foo():
global n
n = n * n
return n
この例では、変数nが変更されています。
Pythonで関数を呼び出す方法はありますか? パラメータ のどちらかです。 値 または 参照 パラメータを使用する代わりに、global?
次に、ケンブリッジ大学のAレベルの試験で、関数が返すのは シングル 値を返すのに対し、プロシージャは 複数の の値を返します。80年代には、関数にはreturn文があり、プロシージャにはないと教わりました。なぜ今これが間違っているのでしょうか?
どのように解決するのですか?
のようなイミュータブルなオブジェクトを変更することはできません。
str
または
tuple
のように、Pythonの関数内部で、でも、できる。
def foo(y):
y[0] = y[0]**2
x = [5]
foo(x)
print x[0] # prints 25
ただし、配列の特定の要素を常に二乗する必要がある場合を除けば、それは奇妙な方法です。
Pythonでは、複数の値を返すこともできるため、参照渡しのユースケースのいくつかはあまり重要でなくなることに注意してください。
def foo(x, y):
return x**2, y**2
a = 2
b = 3
a, b = foo(a, b) # a == 4; b == 9
このように値を返す場合、Tupleとして返され、それが順番に展開されます。
を編集してください。 このことについて考える別の方法は、Pythonで明示的に変数を参照渡しすることはできませんが、渡されたオブジェクトのプロパティを変更することは可能です。私の例では(そして他の例でも)、あなたは渡されたリストのメンバーを変更することができます。しかし、渡された変数を完全に再代入することはできません。例えば、次の2つのコードは、同じようなことをやっているように見えますが、異なる結果になっていることを確認してください。
def clear_a(x):
x = []
def clear_b(x):
while x: x.pop()
z = [1,2,3]
clear_a(z) # z will not be changed
clear_b(z) # z will be emptied
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] Pythonにはなぜ++と--の演算子がないのですか?
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Pythonの辞書にあるスレッドセーフについて