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

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

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

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

Python

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

Q&A

解決済

2回答

1237閲覧

python の from と import について教えて下さい。

EzrealTrueshot

総合スコア389

Python 3.x

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

Python

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

2グッド

2クリップ

投稿2021/10/16 20:18

こちらのyoutubeを見ていて勉強していたのですが、コードの中に
https://www.youtube.com/watch?v=YRAIUA-Oc1Y

python

1from pyautogui import * 2import pyautogui

とありました。

これって、1行目で pyautoguiの全て(アスタリスク)をインポートしているので、
2行目で import pyautogui とやる必要がないのでは?と思ってしまいます。

逆に2つの形式で書いてしまうことで、pyautoguiの関数の書き方はどちらの方式(from pyautogui import *でインポートした場合の書き方か、import pyautoguiでインポートした場合の書き方か)で書けばいいかわからないのですが、これはどういう意図があって記載されているかご存知の方いらっしゃいましたらご教示いただけませんでしょうか?

Nova124👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/10/16 22:14 編集

> どういう意図があって記載 やっぱり「お行儀が悪い」ですよね。 アスタリスクを使うと関数も変数も根こそぎインポートしてしまう都合上、あとでバッティングする名前を使うと上書きされてしまいますので…・ 意図は何でしょうね、うっかりやってしまったなのか、コピペでできてしまったのか。
guest

回答2

0

python

1from pyautogui import *

の場合、

python

1import pyautogui 2pyautogui.press('enter')

などと書いていたところを

python

1press('enter')

と書くことができるようになります
pyautoguiの関数をたくさん使うのであれば省略目的ではいいのかもしれません

ただpythonの仕様上、

python

1from pyautogui import *

と行なった場合でも、

python

1press('enter') 2pyautogui.press('enter')

のように書けるはずです。
その為、コードが見にくくなるためどちらか片方だけにした方が良いということになります
ちなみにどちらを何回でも行なってもメモリの使用容量はPython使用上変わりません
ただ変数名、クラス名が変わっただけになります
ちなみに追記、修正依頼にて書いてある
「根こそぎインポートしてしまう」
に関しては

python

1import pyautogui

と行なった場合でも
変数を呼び出すことができます

以下例

test1.py

python

1import test2 2 3print(f'a: {test2.a}') 4print(f'b: {test2.b}') 5print(f'c: {test2.c}')

test2.py

python

1a = 'hoge1' 2b = 'hoge2' 3c = 'hoge3'

結果

Result

1a: hoge1 2b: hoge2 3c: hoge3

となります
また

python

1from test2 import *

と行なった場合は
前に書いた通りに

python

1print(f'a: {a}') 2print(f'b: {b}') 3print(f'c: {c}')

と書けるようになります

これらをまとめると、

python

1import pyautogui 2#または 3from pyautogui import *

のうち、

python

1from pyautogui import *

と行なった場合は

python

1import pyautogui

と行なった場合とは違い、
pyautoguiに入っている変数名関数名をそのまま書くことができるようになります
ただ普通は

python

1import pyautogui

と行なった方が(コードの見易さ、理解のしやすさ的に)良いので
アスタリスクを使わない方をお勧めします

投稿2021/10/16 23:43

編集2021/10/16 23:49
Nova124

総合スコア37

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

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

EzrealTrueshot

2021/10/17 02:29

ありがとうございます! fromとimportの違いについては知っているのですが、なぜ両方書いているのかがわからなかったため質問させていただきました。 どうやら、youtubeにあげた方のミス(or 勘違い)だったようです。
guest

0

ベストアンサー

  • これって、1行目で pyautoguiの全て(アスタリスク)をインポートしているので、

2行目で import pyautogui とやる必要がないのでは?と思ってしまいます。

こういう疑問を持つ方はソフト開発の適性があります。
ただし、問題は2行書いていることよりもfrom pyautogui import *という書き方そのものです。

  • こちらのyoutubeにfrom pyautogui import *があった

そういうコードを書いて恥ずかしげもなく人に見せる人はソフト開発の適性がありません。
C言語でいえば、static宣言できる関数をstatic宣言なしでコーディングするのと同じことですので、納品物にそれが含まれていれば次回からは発注候補から外されるレベルです。

from XXX import *を使うのは、Pythonのパッケージ(複数ファイルから構成されるライブラリ)のように不特定多数に対して機能を提供する場合に限るべきです。

  • 結論

そのyoutubeの中身は忘れて、もっとまともな本かWebサイトで勉強し直しましょう。

とりあえずは、公式ドキュメント Python チュートリアルを一通り読むことをお勧めします。

投稿2021/10/16 22:40

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問