質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

3回答

586閲覧

Pythonにて、他の変数を参照する変数の挙動について

milcovich

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/10/04 11:45

編集2021/10/04 11:52

いつもお世話になっております。
変数内で変数の展開を行った場合の挙動についてご教授いただきたいです。

python

1_VAR1 = None 2_VAR2 = None 3_VAR3 = f'local/{_VAR1}/{_VAR2}' 4 5def main(): 6 global _VAR1 7 global _VAR2 8 global _VAR3 9 _VAR1 = dir 10 _VAR2 = filename 11 print(_VAR3)

この様なコードを実行した場合、printによって出力される文字列は
'local/None/None'
になることから、グローバル変数_VAR3がはじめに_VAR1,2を参照していても_VAR3への反映は行われないことから、変数は改めて宣言を行わなければ値の更新は行われないという認識で正しいでしょうか?
また、_VAR1,2へ値の代入が行われた瞬間にそれを_VAR3に反映するためにはどうするのが正しいでしょうか(代入後に_VAR3を改めて宣言するしかないのでしょうか)?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

たまにある誤解ですが、
代入は変数同士の関係の宣言じゃなくて、書いた時点で=の右辺を評価して左辺に代入するだけです。

_VAR3 = f'local/{_VAR1}/{_VAR2}'
は、この行の実行時点での_VAR1_VAR2の値を埋め込んだ文字列を作って、その結果の文字列を_VAR3に代入します。

b=0してa=bしたあとで、b=1してもa1にならないのと同じ。

ここをクリアーすると、次に「代入とオブジェクト書き換えの区別がつかない」という関所があります。

投稿2021/10/04 12:07

otn

総合スコア84806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こういう質問をされる方は、Excelのようなスプレッドシートを使い慣れている方に多いように思います。これは自動再計算と呼ばれる機能です。

自動再計算、つまりある時点で変数に代入された式に含まれる変数が変更されたときに自動的に値が変更されるという機能は、スプレッドシート以外のプログラミング言語では、一般的に持っていません。

  • グローバル変数_VAR3がはじめに_VAR1,2を参照していても_VAR3への反映は行われない

代入文の右辺が評価されて、左辺の変数に代入されます。
評価というのは、「値を計算すること」だと考えてください。
そのあとで、右辺で使われている変数が変更されても自動再計算は行われません。なぜなら左辺の変数は、計算式ではなく計算結果しか持っていないからです。

  • 代入後に_VAR3を改めて宣言するしかないのでしょうか

はい。
ただし、宣言とは呼ばず、更新とか代入と呼びます。

投稿2021/10/04 12:03

編集2021/10/04 12:04
ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数は、参照している時点の値が読み出されます。
もひとつ、関数の中で定義される変数と外で定義される変数は別物となります

_VAR1,2へ値の代入が行われた瞬間にそれを_VAR3に反映するためにはどうするのが正しいでしょうか

代入が行われたあとに参照しましょう

投稿2021/10/04 11:47

編集2021/10/04 11:50
y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問