Pythonで処理をまとめる方法について解説していきます。「組み込み関数」「モジュール」「パッケージ」の違いを理解してコーディングできるようになると良いと思います。
目次
関数
def文
で関数を定義します。
def add(x, y):
return x + y
print(add(2, 5))
7
デフォルト
デフォルト値を指定してみます。
def add(x, y, z=2):
return x + y + z
# キーワード引数を指定。順番の考慮が不要
print(add(y=2, x=5))
9
可変長引数
タプルとして受け取る
def add(x, y, *args):
print(args)
z = 0
for i in args:
z += i
return x + y + z
print(add(2, 5, 1, 1, 1))
(1, 1, 1)
10
辞書として受け取る
def add(x, y, **kwargs):
print(kwargs)
z = 0
for i in kwargs.values():
z += i
return x + y + z
print(add(2, 5, z1=1, z2=2))
{'z1': 1, 'z2': 2}
10
クラス
class MyClass:
# コンストラクタ
def __init__(self, x, y):
self.x = x
self.y = y
# メソッド
def add(self):
print(self.x + self.y)
my_class = MyClass(5, 4)
my_class.add()
9
組み込み関数、モジュール、パッケージ
用語整理
- 組み込み関数
- pythonをインストールすると一緒にインストールされます。
- importせずに使うことができる関数です。
- https://docs.python.jp/3/library/functions.html
- モジュール
- 再利用可能な関数やクラスが定義されたPythonスクリプトファイルです。
- モジュールには
自作モジュール
標準モジュール
外部モジュール
が存在します。 - ライブラリとも言います。
import
することで利用できます。
- 標準モジュール(標準ライブラリ)
- pythonをインストールすると一緒にインストールされます。
- モジュールなので、利用するには
import
が必要です。 - https://docs.python.jp/3/library/index.html
- 外部モジュール(外部ライブラリ)
- サードパーティ製の外部ライブラリです。
- https://pypi.org/ で公開されています。
- pythonをインストールしただけでは存在しません。
- パッケージマネージャでインストール後、
import
で取り込む必要があります。
- パッケージ
- 複数の同じような機能をもつモジュールを
ディレクトリに集めたもの
です。 __init__.py
を作ることでパッケージになります。__init__.py
はパッケージを読み込む時に、最初に読み込まれます。
- 複数の同じような機能をもつモジュールを
参考
https://docs.python.org/ja/3/tutorial/modules.html
e.g.) モジュールのimportと利用
下記、構成を例にモジュールを利用してみます。
├── xxx
│ ├── yyy
│ │ ├── __init__.py
│ │ └── ccc_module.py
│ ├── __init__.py
│ └── bbb_module.py
└── module_test.py
パッケージは「ディレクトリ」で、モジュールは「pythonスクリプトファイル」になります。
def add(x, y):
print(f"__name__ = {__name__}")
print(f"{x} + {y} = {x + y}")
def sub(x, y):
print(f"__name__ = {__name__}")
print(f"{x} - {y} = {x - y}")
import xxx.yyy.ccc_module
from xxx import bbb_module
def main():
print(f"__name__ = {__name__}")
# importのみの指定なので、フルパスで指定します。
xxx.yyy.ccc_module.add(4, 2)
# from指定なので、モジュール名のみの指定でアクセスできます。
bbb_module.sub(4, 2)
if __name__ == "__main__":
main()
実行結果は以下のようになります。
$ python module_test.py
__name__ = __main__
__name__ = xxx.yyy.ccc_module
4 + 2 = 6
__name__ = xxx.bbb_module
4 - 2 = 2
「__name__」について
__name__
には、Pythonファイルのモジュール名が文字列で格納されます。
python ファイル名.py
で実行したとき、ファイル名.py
内の __name__
は "__main__"
になります。
いろいろなインポート方法
import パッケージ名.モジュール名
import package_name.module_name
package_name.module_name.method_name()
package_name.module_name.class_name()
import パッケージ名1.パッケージ名2.モジュール名
import package_name1.package_name2.module_name
package_name2.module_name.method_name()
package_name2.module_name.class_name()
from パッケージ名 import モジュール名
from package_name import module_name
module_name.method_name()
module_name.class_name()
from パッケージ名 import モジュール名 as 別名
from package_name import module_name as name
name.method_name()
name.class_name()
from パッケージ名.モジュール名 import メソッド名
メソッドを直接利用できるようになりますが、どこのメソッドかわかりづらいの推奨されていません。
from package_name.module_name import method_name
method_name()
import パッケージ名.*
*
を利用すると、__init__.py
の __all__
で指定されたモジュールを読み込みます。
どのパッケージのモジュールなのかわかりづらいので推奨されていません。
__all__ = ['ccc_module]
from xxx.yyy import *
ccc_module.add(4, 2)
主な標準モジュール
モジュール | 概要 |
---|---|
datetime | 日付や時刻の操作 |
string | 文字列操作 |
re | 正規表現操作 |
math | 数学関数 |
random | 乱数生成 |
collections | コンテナデータ型 |
enum | 列挙型のサポート |
os.path | 共通のパス名操作 |
shutil | ファイル操作(コピーなど) |
fileinput | 複数ファイルを1度にまとめて処理できる |
そのほか、Pythonモジュール索引から調べることができます。