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

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

新規登録して質問してみよう
ただいま回答率
85.48%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

996閲覧

【Python】for内のimportが予想外の動作をするので修正したい

halzip

総合スコア3

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

2クリップ

投稿2021/01/20 23:11

前提・実現したいこと

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

該当のソースコード

paisonn

1プログラム名:メイン 2 3hais = ["a","b","c","d","e","f"] 4i = 0 5for hai in hais: 6 print(hai) 7 import ループ1 8 i = i + 1 9

paisonn

1プログラム名:ループ1 2 3from メイン import i 4print(i)

試したこと

原因の検討もつかず試せておりません…
どなたかご教授いただけませんでしょうか。
よろしくお願いいたします。

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

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

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

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

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

y_waiwai

2021/01/20 23:33

あなたはどうなると思ってるんでしょうか。
tomy-c

2021/01/21 00:37

他の言語に触られていたのであればそのimportの書き方自体おかしいと直感で察することが出来ると思うのですが、プログラミングの経験はpythonが初めてでしょうか?
guest

回答3

0

ベストアンサー

一度importされたモジュールは、そのあとのimport文で再度読み込まれません。
ループの中でimportしても、最初の1回目でのみimport(実行)されて、それ以降では何も起こらないです(正確には、全く何も起こらないわけではないです→下記コメント参照)。
なので、通常はループの中でimportするようなことはしないです。

今回の例では、ループ1からメインをimportしているのでちょっと複雑ですが、実際に実行されるのは最初のimportだけということに注意しながら、動きを追ってみると実行結果がそうなるのが理解できると思います。

importlib.reload()を使うと強制的に再度読み込めますが、あまりそういう使い方はしないと思います。

他の方の回答にもありますが、モジュール内では関数やクラスを定義して、それを使うようにするのが一般的です。

投稿2021/01/21 00:55

編集2021/01/21 02:36
bsdfan

総合スコア4560

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

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

halzip

2021/01/21 01:37

回答ありがとうございます! importの特性までご説明いただきありがとうございます。 おかげ様で理解が深まりました。 ベストアンサーに選ばせていただきました。
quickquip

2021/01/21 02:29

「それ以降では何も起こらないです」はちょっと正確ではなくて、モジュールの探索と名前の束縛は毎回起こりますよね。そこだけ気になりました。
bsdfan

2021/01/21 02:41

quickquipさん、ご指摘ありがとうございます。そのとおりですね。正確さに欠ける表現でした。 ここらあたりをわかりやすく説明するのが難しかったのでざっくり書いてしまいました。
guest

0

pythonで他の.pyプログラムを実行すると用法に相違があるように思われます。下記のように書くと、期待する出力結果が出ると思われますが、いかがでしょうか。

loop.py

python

1def hoge(i): 2 print(i)

main.py

python

1from loop import hoge 2 3hais = ["a", "b", "c", "d", "e", "f"] 4i = 0 5for hai in hais: 6 print(hai) 7 hoge(i) 8 i = i + 1 9

output

a 0 b 1 c 2 d 3 e 4 f 5

投稿2021/01/21 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

halzip

2021/01/21 01:35

丁寧に教えていただきありがとうございます! おかげ様でdefの使い方を理解できました。
guest

0

importってのはコードを実行させるような命令じゃありません
調べ直してみては。

投稿2021/01/20 23:35

y_waiwai

総合スコア87749

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

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

halzip

2021/01/20 23:41

回答ありがとうございます。 調べたところ↓のように解説しているサイトが複数ありましたので、 importは他のpyファイルから変数をもってきたり、pyファイル自体を実行するものだと考えていました。 https://qiita.com/ume1126/items/c1be49cc9ad5553ecc78 >あなたはどうなると思ってるんでしょうか。 importについて上記の思考をしていたので「■実現したい出力結果」が出力されるものだと考えていました…
y_waiwai

2021/01/20 23:57

そのリンク先には、 外部ファイルの関数を実行するときは、 まずインポートして 次に インポートファイル.関数名() で実行できます。 と、ありますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問