
よろしくお願いします。python初心者です。
テキストで下記のような文があったのですが、どうしてこのような結果になるのかがわかりません。
教えて頂けないでしょうか。
===============================
i = 3
i = 8
def f(abc = i):
i = 5
print(abc)
i = 4
i = 10
f()
→f() の結果 8
最後から2番目の行で、関数fの引数は i=10なので、10二はならないのでしょうか。
google colabを使って行ないました。
教えてください、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
あるあるですね。
python では変数 は値の入れ物ではなく
オブジェクトの参照を保持すると考えて下さい。
i=8
というのは値が8の整数オブジェクトが作られ、その「参照」が
iに代入されます。iに整数オブジェクトが代入されるのでは無いのです。
参照はcのポインタのようなものです。
def f(abc=i):
では、関数fの引数abcの既定値として
値が8の整数オブジェクトの「参照」が渡されます。
変数iが既定値になるわけでは有りません。
defで関数を定義した瞬間にiが保持していたオブジェクトの参照が
abcの既定値になるのです。
従って、パラメータ無しでfを呼び出せば
abcに値が8の整数オブジェクトの参照がセットされます。
因みに 関数定義 の後で、iの値を変えてますが、
これは新しい整数オブジェクトが作られ、その参照が
iに代入されます。しかしこれは、関数fの動きには
全く影響を与えません。fはiのことなど全く知らないのです。
また、関数内のローカル変数iは、同名のグロ―バル変数i
とは全く別物です。
No.3
- 回答日時:
まず、ここに投稿するときは、先頭の空白を、全角スペースとか別な文字(□とか)の置き換えてください。
空白がまとめられてしまうため、プログラム構造がわからなくなってしまいます。
たぶん、
def f(abc = i):
□i = 5
□print(abc)
だと思うので。
間違い:
def f(abc = i):
関数fを定義
引数が1つ: abc 省略可能。省略時は「変数i」
f()→ 引数が省略されているので、f(i) と同じ
→ i=10なので、10と出力
正解:
def f(abc = i):
関数fを定義
引数が1つ: abc 省略可能。省略時は「この時点での変数iの値、つまり8」
f()→ 引数が省略されているので、f(8) と同じ
→ 8と出力
ついでに
def f(abc = i):
□i = 5 # 関数fでのローカル変数。他のiとは別扱い
□print(abc)
回答で記載頂いているとおりです。
関数内のインデントがわかるように記載すべきでした。
グローバル変数とローカル変数のついて理解が出来ていないと理解しました。
最初の
i = 8
はグローバル変数で、関数 f () に引数を与えないときは、i = 8が最優先されるため、
f () の実行結果は8になるのだと理解しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
みんなに挑戦してほしい「色彩検定」
これまで多くの方々が受検したが「色彩検定」。その目的や活用法は人それぞれ。今回は、色彩検定に影響を受けた男女3名にインタビュー。
-
プログラミングを勉強したいのですが、はじめての言語が機械語(マシン語)ってどう思いますか?
その他(プログラミング・Web制作)
-
今からプログラマー目指す人はかわいそう
その他(プログラミング・Web制作)
-
プログラミングで変数と関数の違いはなんでしょうか?
その他(プログラミング・Web制作)
-
4
時給いくらかを支払いプログラム言語を教えてくれる人を探したい
その他(プログラミング・Web制作)
-
5
コンパイルについて。
C言語・C++・C#
-
6
自作システムをユーザにダウンロードしてもらい、ユーザの環境に合わせて動作出来るようにするには?
その他(プログラミング・Web制作)
-
7
ソースコード1これを実行するとエラーがでます。おしえてください
C言語・C++・C#
-
8
c言語の本を教えてください。分厚くて辞書みたいなやつがいいです。日本の本屋さんで変える、のにしくださ
C言語・C++・C#
-
9
Microsoft Visual Studio Code 使用不可!・・・を覆せる?
その他(プログラミング・Web制作)
-
10
パイソンについて。for文の変数は、for文ごとに使い分ける、が無難ですか?たとえば、 for x
C言語・C++・C#
-
11
アセンブリ言語について。
その他(プログラミング・Web制作)
-
12
C言語 ループ中からの関数の呼び出し方のコーディング
C言語・C++・C#
-
13
pythonによるcsv出力がうまくいきません。
その他(プログラミング・Web制作)
-
14
C言語で、 printf()とwhile文を一回だけ使って実行結果が 1 2 3 4 5 6 7 8
その他(プログラミング・Web制作)
-
15
C言語でオークションサイトは作れますか?
C言語・C++・C#
-
16
ジャバスクリプトでのことですが(初心者なのでできるだけ専門用語は少なくしていたらければうれしいです)
その他(プログラミング・Web制作)
-
17
数学とプログラミング
その他(プログラミング・Web制作)
-
18
コンパイルについて。
C言語・C++・C#
-
19
Pythonで構築したら便利なシステムって何ですか?
その他(プログラミング・Web制作)
-
20
12種のペントミノのうちm 個を用いてサイズ m×5 の長方形を埋める解を全て求めるプログラムを作成
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
VBでPDFファイルを編集する
-
5
VBAで Set wb = Sheets(1).Cop...
-
6
[VBA]CDOメッセージ送信エラー
-
7
VBAからPDFファイルにパスワー...
-
8
EXCEL VBA オートシェイプナン...
-
9
エクセルマクロエラー「'Cells'...
-
10
VBで引数にDictionaryオブジェ...
-
11
オブジェクト変数またはWITHブ...
-
12
マクロ初心者です。 インデック...
-
13
Excelでフィルタをかけると警告...
-
14
エクセルから表をパワーポイン...
-
15
ある文字列が全て数字であるか...
-
16
(初心者です)VBAについて。「実...
-
17
Excel VBA Collection.add で R...
-
18
エクセルVBAでcode128のバー...
-
19
エクセルVBAの散布図の近似曲線...
-
20
VBScriptからDLL参照設定したい
おすすめ情報
公式facebook
公式twitter