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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Q&A

解決済

3回答

1397閲覧

pythonのリストオブジェクトを使う際の初期化する理由

sequelanonymous

総合スコア123

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

0グッド

0クリップ

投稿2018/09/23 07:45

以下のようなコードがあったとして、なぜ空のリストを事前にいれて初期化する必要があるのでしょうか?
テストコードも初期化処理(test_list = []とhoge_list = [])の箇所をコメントアウトしても何もエラーが出ません。本当に書くべき必要があるものなのでしょうか?

python

1def function(): 2 test_list = [] 3 if 'test' in body['scope']: 4 test_list = is_unique(body['scope']['test']) 5 6 hoge_list = [] 7 if 'hoge' in body['scope']: 8 hoge_list = is_unique(body['scope']['hoge']) 9 10 11 for test in test_list: 12 ... 13 14 for hoge in hoge_list: 15 ... 16 17return hogehoge

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

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

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

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

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

guest

回答3

0

'test' in body['scope']'hoge' in body['scope']Falseだった場合、すぐ下でNameError: name '~~' is not definedになります。その対策です。

つまるところ、こう書いているのと同じです。

python

1 if 'test' in body['scope']: 2 test_list = is_unique(body['scope']['test']) 3 else: 4 test_list = [] 5 6 if 'hoge' in body['scope']: 7 hoge_list = is_unique(body['scope']['hoge']) 8 else: 9 hoge_list = []

これなら納得がいくのでは?

投稿2018/09/23 07:51

編集2018/09/23 08:03
hayataka2049

総合スコア30933

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

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

0

ベストアンサー

初期化処理(test_list = []とhoge_list = [])の箇所をコメントアウトしても何もエラーが出ません。本当に書くべき必要があるものなのでしょうか?

次のような理由です。
ブロック内に処理が進まなかったときに NameError が発生します。

Python

1>>> lst = [] 2>>> 3>>> dst = [] 4>>> for e in lst: 5... dst = [e] 6... 7>>> print(dst) 8[]

Python

1>>> lst = [] 2>>> 3>>> for e in lst: 4... dst = [e] 5... 6>>> print(dst) 7Traceback (most recent call last): 8 File "<stdin>", line 1, in <module> 9NameError: name 'dst' is not defined

追記:
うっかりfor文の例を挙げてしまいましたが、事情は同じです。
ブロック内で変数を宣言する場合は、常に『ブロックに入らなかった場合』を考慮する必要があります。

投稿2018/09/23 07:51

編集2018/09/23 07:54
LouiS0616

総合スコア35660

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

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

sequelanonymous

2018/09/23 07:56

> 常に『ブロックに入らなかった場合』を考慮する必要があります。 腑に落ちました。ありがとうございます。
guest

0

初期化がない場合、

if 'test' in body['scope']

この条件がfalse のとき、

for test in test_list:

ここでエラーとなってしまいます

投稿2018/09/23 07:49

y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問