【Python】for内のimportが予想外の動作をするので修正したい
解決済
回答 3
投稿
- 評価
- クリップ 2
- VIEW 270
前提・実現したいこと
Pythonで作成中です。
forループの中に別のプログラムを呼び出すためにimportを使用しているのですが、
出力結果が想定外のものになり困っています。
■実現したい出力結果
a
0
b
1
c
2
d
3
e
4
f
5
■実際の出力結果
a
a
b
c
d
e
f
6
b
c
d
該当のソースコード
プログラム名:メイン
hais = ["a","b","c","d","e","f"]
i = 0
for hai in hais:
print(hai)
import ループ1
i = i + 1
プログラム名:ループ1
from メイン import i
print(i)
試したこと
原因の検討もつかず試せておりません…
どなたかご教授いただけませんでしょうか。
よろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
一度importされたモジュールは、そのあとのimport文で再度読み込まれません。
ループの中でimportしても、最初の1回目でのみimport(実行)されて、それ以降では何も起こらないです(正確には、全く何も起こらないわけではないです→下記コメント参照)。
なので、通常はループの中でimportするようなことはしないです。
今回の例では、ループ1からメインをimportしているのでちょっと複雑ですが、実際に実行されるのは最初のimportだけということに注意しながら、動きを追ってみると実行結果がそうなるのが理解できると思います。
importlib.reload()
を使うと強制的に再度読み込めますが、あまりそういう使い方はしないと思います。
他の方の回答にもありますが、モジュール内では関数やクラスを定義して、それを使うようにするのが一般的です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
importってのはコードを実行させるような命令じゃありません
調べ直してみては。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
pythonで他の.pyプログラムを実行すると用法に相違があるように思われます。下記のように書くと、期待する出力結果が出ると思われますが、いかがでしょうか。
loop.py
def hoge(i):
print(i)
main.py
from loop import hoge
hais = ["a", "b", "c", "d", "e", "f"]
i = 0
for hai in hais:
print(hai)
hoge(i)
i = i + 1
output
a
0
b
1
c
2
d
3
e
4
f
5
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
y_waiwai
2021/01/21 08:33
あなたはどうなると思ってるんでしょうか。
tomy-c
2021/01/21 09:37
他の言語に触られていたのであればそのimportの書き方自体おかしいと直感で察することが出来ると思うのですが、プログラミングの経験はpythonが初めてでしょうか?