Pythonでのパッケージの導入を理解する方法

import *およびimport *からのPython、それらの機能はパッケージを使用に導入することですが、それらはどのように実行され、なぜこの構文を使用するのですか?

1つのモジュールからすべての機能をインポートします

from import *は、「アクセス許可のあるすべての名前にアクセスできるようにしたい」という意味です。たとえば、次のコードはsomething.pyです。

# something.py
public_variable =42
_ private_variable =141
def public_function():print("I'm a public function! yay!")
def _private_function():print("Ain't nobody accessing me from another module...usually")classPublicClass(object):
 pass
class_WeirdClass(object):
 pass

Pythonインタープリターでは、import *から実行すると、次のように表示されます。

from something import*
 public_variable
42
 _ private_variable
...
NameError: name '_private_variable' is not defined
 public_function()"I'm a public function! yay!"_private_function()...
NameError: name '_private_function' is not defined
 c =PublicClass()
 c
< something.publicclass object="" at=""...="" 
 c =_WeirdClass()...
NameError: name '_WeirdClass' is not defined

from something import * _で始まる名前を除くすべての名前を何かからインポートしました。仕様によると、_で始まる名前はプライベートであり、インポートされていません。

__all__が上で言及されていないもの。 __all__は、from import *が使用されたときに、モジュール(または後述するパッケージ)内のどのシンボルがエクスポートされるかを指定する文字列のリストです。 __all__を定義しない場合(上記でsomething.pyを定義しなかった場合)、import *のデフォルトのインポート方法は、下線(_)を除くすべての名前をインポートすることです。繰り返しになりますが、下線が引かれたプログラミング規則は、シンボルがプライベートであり、インポートしないことが合理的であることを示しています。独自の__all__をsomething.pyで定義するとどうなるか見てみましょう。

# something.py
__ all__ =['_private_variable','PublicClass']
# The rest is the same as before
public_variable =42
_ private_variable =141
def public_function():print("I'm a public function! yay!")
def _private_function():print("Ain't nobody accessing me from another module...usually")classPublicClass(object):
 pass
class_WeirdClass(object):
 pass

ここで、import *は、_private_variableとPublicClassのみをインポートすることを期待しています。

# something.py
__ all__ =['_private_variable','PublicClass']
# The rest is the same as before
public_variable =42
_ private_variable =141
def public_function():print("I'm a public function! yay!")
def _private_function():print("Ain't nobody accessing me from another module...usually")classPublicClass(object):
 pass
class_WeirdClass(object):
 pass

バッグは何ですか?

パッケージからすべてをインポートする場合、__ all__は基本的にモジュールと同じですが、(モジュール内のすべての名前をインポートするのではなく)パッケージ内のモジュールを処理します。したがって、from import *を使用する場合、__ all__は、現在の名前名にインポートする必要があるすべてのモジュールを意味します。

違いは、パッケージの__init__。pyで__all__を宣言しない場合、from import *ステートメントは何もインポートしないことです(このステートメントは完全には正しくありません。これが正しいステートメントです)。

しかし、これの何が問題になっていますか?

続行する前に、Pythonインタープリターでこれをインポートして実行し、PythonのZenをもう一度読んでください(就寝前に毎晩子供に読んでください)。

曖昧であるよりも明確である方が良いです。

インポートから*はあいまいです。何をインポートしているのか、現在の名前名に何を持ち込んでいるのかはわかりません。より良いアプローチは、必要なすべての名前を明示的にインポートすることです。このようにして、読者(将来的にはおそらくあなた自身)は、コードで使用される変数/メソッド/クラス/その他のものがどこから来ているのかについて混乱することはありません。これは次のポイントも教えてくれます。

読みやすさが重要です

多くのものをインポートする必要がある場合でも、明示的に1つずつインポートする方が明確です。 PEP328を使用します。

from Tkinter import(Tk, Frame, Button, Entry, Canvas, Text,
 LEFT, DISABLED, NORMAL, RIDGE, END)

これで、名前空間の内容を明確に知ることができ、ctrl + fを使用すると、それらがどこから来たのかをすばやく知ることができます。

同時に、モジュール/パッケージの作成者がリストの内容を変更する(追加/削除する)リスクを常に負う必要があります。

コンテンツの拡張:

基本的な注意

上記は、Pythonでのパッケージの導入の詳細を理解する方法です。Pythonでのパッケージの導入の詳細については、ZaLou.Cnの他の関連記事に注意してください。

Recommended Posts

Pythonでのパッケージの導入を理解する方法
pythonで番号のリストを理解する方法
Pythonで変数を理解する方法
pythonで円の領域を見つける方法
Pythonでグローバル変数を理解する方法
Pythonでzip関数を使用する方法
Pythonでの歩留まりを理解するための記事
pythonでformat関数を使用する方法
ダウンロードしたモジュールをpythonでインストールする方法
ubuntuでのHanlpの使用の概要
pythonオブジェクトを理解する方法
pythonで写真を自動的にダウンロードする方法の例
pythonコードでラップする方法
pythonプログラムを保存する方法
Pythonで括弧を省略する方法
pythonでクラスを書く方法
pythonで数値をフィルタリングする方法
PythonでExcelを読む方法
pythonでエラーを表示する方法
pythonでreturnを書く方法
pythonモジュールを表示する方法
pythonで変数をクリアする方法
pythonオブジェクト指向プログラミングを理解する方法
pythonでのタプルの使用法
PythonでSQLiteを使用する方法
pythonでのrbの意味を理解する
pythonのインストールが成功したことを確認する方法
およびおよびまたはPythonでの使用方法
pythonでキャッシュファイルを削除する方法
Pythonでサードパーティモジュールを導入する方法
pythonでnull値を表す方法
Python3クローラーでのAjaxの使用
pythonでテキストファイルを保存する方法
圧縮パッケージを使用してLinux環境にJDK13をインストールする方法
pythonでwinプログラムを書く方法
pythonでid関数を実行する方法
Pythonでサードパーティモジュールをインストールする方法
01.Pythonの概要
Pythonでプライベート属性を定義する方法
Pythonでカスタムモジュールを追加する方法
インストールされているモジュールをpythonで表示する方法
Pythonタイムモジュールを学ぶ方法
さまざまなシステムでのPythonopenメソッド
pythonで辞書を並べ替える方法
Pythonの紹介
pythonで背景音楽を追加する方法
pythonで相対パスを表す方法
pythonでのadbの機能は何ですか
Pythonのインターフェースに基づいてプログラミングする方法
Pythonゲームで重力をシミュレートする方法
pythonでのリストの意味と使用法
win10でubuntuシステムを開く方法
pythonでアシスタントを実行するコードを使用する方法
コマンドラインからpythonを入力する方法
pythonでコード自動プロンプトを設定する方法
27歳でパイソンを学ぶのはどうですか?
pythonを使用してhostsファイルを切り替える方法
pythonでゲームを書く方法を教えてください
pythonでファイルとディレクトリを削除する方法
ubuntuでpythonをアンインストールした結果、非常に
告白プログラムをpythonで書く方法