<jupyter_start><jupyter_text>5-1. モジュールの使い方モジュールの使い方について説明します。参考- https://docs.python.org/ja/3/reference/import.html- https://docs.python.org/ja/3/tutorial/modules.html- https://docs.python.org/ja/3/library/math.html モジュールのインポートPythonでは特別な関数や値をまとめたもの（これを**モジュール**といいます）を使うために、**`import`** という文を使います（第1回 (1-1) においても説明しました）。具体的には次のように記述します。---```Pythonimport モジュール名```---たとえば、数学関係の機能をまとめた `math` というモジュールがあります。これらの関数や値を使いたいときは、以下のようにして `math` モジュールを `import` で**インポート**します。そうすると、`math.関数名` という形で関数を用いることができます。<jupyter_code>import math# importは大抵セルの一番上に記述します
print(math.sqrt(2)) # sqrt は平方根を計算する関数
print(math.pi) # πの値
print(math.sin(math.pi/4)) # sin関数 
print(math.cos(0)) # cos関数 
print(math.log(32,2)) # 2を底とする32の対数（texで記述すると、$\log_2 32$）<jupyter_output><empty_output><jupyter_text>上の例では、`math` モジュールの中の関数や値を使用しています。注意しなければならないのは、モジュールの中の関数を使う場合には、---```Pythonモジュール名.モジュールの中の関数名```---とする必要があるということです。モジュールの中の値（たとえば `math.pi`）も同様です。なお、複数の関数名をコンマ `,` で区切って並べて同時にインポートすることもできます。  `from`モジュール内で定義されている関数を「モジュールの中の関数名」のようにして、「モジュール名.」を付けずにそのままの名前で、モジュールの読み込み元のプログラムで使いたい場合には、**`from`** を以下のように書くことで利用することができます。---```Pythonfrom モジュール名 import モジュールの中の関数名```---たとえば、次のようになります。<jupyter_code>from math import sqrt
print(sqrt(2)) # sqrt は平方根を計算する関数 
from math import pi
print(pi) # πの値
from math import sin
print(sin(math.pi/4)) # sin関数 
from math import cos
print(cos(0)) # cos関数 
from math import log
print(log(32,2)) # 2を底とする32の対数（texで記述すると、$\log_2 32$）<jupyter_output><empty_output><jupyter_text>この方法では、関数ごとに `from` を用いてインポートする必要があります。なお、関数だけではなく、グローバル変数や後に学習するクラスも、このようにしてインポートすることができます。別の方法として、**ワイルドカード** **`*`** を利用する方法もあります。---```Pythonfrom math import *```---この方法ではアンダースコア `_` で始まるものを除いた全ての名前が読み込まれるため、明示的に名前を指定する必要はありません。<jupyter_code>from math import *
print(factorial(5)) # 5 の階乗 # import mathを使う場合、math.factorial(5)
print(floor(2.31)) # 2.31以下の最大の整数  # import mathを使う場合、math.floor(2.31)
print(e) # ネイピア数 # import mathを使う場合、math.e<jupyter_output><empty_output><jupyter_text>ただしこの方法は推奨されていません。理由は読み込んだモジュール内の未知の名前とプログラム内の名前が衝突する可能性があるためです。<jupyter_code>pi = 'パイ' # piという変数に文字列「パイ」を代入する
print(pi) 
from math import *
print(pi) # mathモジュールのpiの値で上書きされる（衝突）<jupyter_output><empty_output><jupyter_text>`as`モジュール名が長すぎるなどの理由から別の名前としたい場合は、**`as`** を利用する方法もあります。たとえば、5-3において学習するNumPyというライブラリは `numpy` モジュールとして提供されていますが、次のように、 `numpy` を `np` という略称で使うことがあります。<jupyter_code>import numpy
print(numpy.ones((3, 5))) # 3×5の行列を表示
import numpy as np
print(np.ones((3, 5))) # np という短い名称で同じ関数を利用する<jupyter_output><empty_output><jupyter_text>個々の関数ごとに別の名前を付けることもできます。<jupyter_code>import math
print(math.factorial(5)) # 階乗を求める関数factorial # 5の階乗
from math import factorial as fact # fact という名前でmath.factorialを使用したい
print(fact(5))<jupyter_output><empty_output><jupyter_text>練習第1回では、数学関数を以下のようにインポートし、`math.sqrt()` のようにして、数学関数や数学関係の変数を利用していました。---```Pythonimport mathprint(math.sqrt(2))print(math.sin(math.pi))```---以下のセルを、モジュール名を付けないでこれらの関数や変数を参照できるように変更してください。<jupyter_code>import ...
...

print(sqrt(2))
print(sin(pi))<jupyter_output><empty_output><jupyter_text>練習の解答`from` を使ってモジュールを指定、参照する関数を `import` でインポートしてください。<jupyter_code>from math import sqrt, sin, pi
print(sqrt(2))
print(sin(pi))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1521875, 'fraction_numerical': 0.0184375, 'mean_word_length': 10.23157894736842, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '117950', 'license': 'MIT', 'n_tokens_mistral': 2136, 'n_tokens_neox': 1922, 'n_words': 146, 'path': '5/5-1.ipynb', 'repo_name': 'salikh/utpython', 'size': '3200'}