python
1list = input() 2 3if len(list) > 1: 4 import random 5 random.shuffle(list)
リストの要素が0や1だとシャッフルしても意味が無いので、randomモジュールをimportする必要も無いですよね? このような時にif文を用いてimportするのは有りなのでしょうか? それでも最初にrandomモジュールをimportするべきなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
そうする必要がないなら冒頭でimportすることが推奨されています。
とても時間がかかる処理 if なにか: import randam
とか
for d in すごくたくさんのループ: if 滅多に起こらない条件: import randam
みたいな馬鹿なミスを避けるために、失敗するべき時はなるべく早いうちに失敗してエラーを出してもらった方がいいので。
fail-fast の考えでしょう。
(追記)
https://www.python.org/dev/peps/pep-0008/#imports
Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.
投稿2019/04/09 12:32
編集2019/04/09 12:37総合スコア11038
0
アリですけれど、if文がスコープを作らない以上意義は薄いと思います。
Python
1lst = [1, 2, 3] 2 3if len(lst) > 1: 4 import random 5 random.shuffle(lst) 6 7random.shuffle(lst) # 外でも普通にrandomモジュールを使える
私はスコープの先頭、つまりこの場合モジュールの先頭でimportすることがより自然に思えます。
これはOK
Python
1tf = True 2if tf: 3 import random 4 5random.shuffle
これはNG
Python
1tf = False 2if tf: 3 import random 4 5random.shuffle # => NameError: name 'random' is not defined
特に真偽値が外部からの操作に依って決まるのであれば、影響を考慮しづらくなります。
投稿2019/04/09 12:35
編集2019/04/09 12:38総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
エラーの可能性を減らしたいのであれば、quiquiさんのおっしゃる通り冒頭でimportするほうがいいでしょう。
ただ、「処理速度を上げる」という観点から考えれば、if文を用いてimportするのは有りだと思います。
下記のリンクによると、モジュールを(初回)importする時間は実行時間に大きく影響する、とされています。容量の大きいモジュールならばなおさら実行時間への影響は大きくなります。
開発時の制約や要望によっては、あえてif文を用いてimportすることが正解になる場合もあるかもしれません。…極稀だとは思いますが。
投稿2019/04/09 13:14
総合スコア1029
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/09 14:00
2019/04/09 14:07 編集
2019/04/10 04:53
2019/04/10 08:52
2019/04/17 11:31