Python アスタリスクを使ったインポート方法

Python学習【365日チャレンジ!】68日目のマスターU(@Udemy11)です。

ちょっと増加する体重が気になってきたので、ウォーキングをはじめました。

スマホをもってウォーキングすれば、自動に活動が記録されるので、ほんと便利な世の中になりました。
AppleWatchだけでなく、時計の役割を備えている活動量計もあるので、自分の健康度合いの管理がめちゃくちゃ便利になっています。

Withingsなどの活動量計をつけて寝れば、睡眠時の心拍数やいびきもチェックしてくれ、睡眠の質まで計測してくれますし、デザインもめっちゃおしゃれです。

withings sports hr

Withings Steel HR Sport
HWA03B-40black-sport

評価 4.0

価格:25,408円 通常配送料無料

Withings スマートウォッチ Sports Steel HR
Amazonで買う
Withings スマートウォッチ Sports Steel HR
楽天市場で買う
Withings スマートウォッチ Sports Steel HR
Yahoo!ショッピングで買う

わたしは数年前に購入したので、ちょっと古いタイプで、Nokiaブランドになっているのですが、心拍数も計測できます。

Withings Steel HR

ただ、寝るときに手首に何かを巻いて寝ることができないので、夜の睡眠チェックは、Withings Sleepを使っています。

Withings Sleep

Withings スマート睡眠パッド
WSM02-ALL-JP

評価 4.0

価格:15,264円 通常配送料無料

Withings スマート睡眠パッド
Amazonで買う
Withings スマート睡眠パッド
楽天市場で買う
Withings スマート睡眠パッド
Yahoo!ショッピングで買う

年をとると、体のそこかしこがおかしくなってくるので、しっかりと健康管理するってのは大切ですよ。

それでは、今日もPython学習をはじめましょう。

昨日の復習

昨日は、絶対パスと相対パスのimportについて学習しました。

絶対パスは、変わることのないパスで、相対パスはモジュールの階層によって変化するパスでした。

次のようなフォルダ階層だとして、最下層のemotion.pyから上位層のutils.pyを参照する場合は絶対パスを使いますが、相対パスを使っても記述することができました。

session ┳ lesson.py
        ┗ lesson_package ┳ __int__.py
                          ┣ utils.py
                          ┗ text_box ┳ __int__.py
                                      ┗ emotion.py
from lesson_package import utils #絶対パス
from .. import utils #相対パス

.(ピリオド)を2つ続けることで一つ上の階層を参照することになり、importで、utils.pyを指定しています。

ただ、この相対パスは、どのモジュールを参照しているのかわかりづらくなるため、Pythonではあまり使わないのが暗黙のルールになっていました。

詳しくはこちらのエントリーを参考にしてください。

それでは、今日のPython学習をはじめましょう。

*(アスタリスク)を使ったimport

最初にお伝えしておきますが、本来このアスタリスクを使ったインポートは、インポートするモジュールをまとめられるので、便利な半面、どんなモジュールが読み込まれているかわからないので、あまり推奨されていません。

それなら必要ないでしょ!

といわれちゃいますが、まさにそのとおりで、はっきりいって自分がコードを書く文には必要はありません。

ただ、このような使い方をしているプログラマがいないわけではないので、このような使い方ができるということだけおぼえておきましょう。

*と__init__.pyの使い方

これまでは、特に説明をせずに、フォルダの中には__init__.pyが必要ですとだけお知らせしていましたが、そんな__init__.pyの意味と*(アスタリスク)の使い方を学習します。

まず復習ですが、次のようなフォルダ階層のパッケージで、ぞれぞれののPythonファイルに下記のコードを記述します。

session3 ┳ lesson.py
         ┗ package ┳ __int__.py
                    ┣ human.py
                    ┗ animal.py

package > human.py

def sing():
    return 'singing'

package > animal.py

def sing():
    return 'Wooooooo!092jpjslkjfiowjrf!!!'

lesson.py

from package import human
from package import animal

print(human.sing())
print(animal.sing())

lesson.pyを実行すると出力結果は次のようになります。

singing
Wooooooo!092jpjslkjfiowjrf!!!

きちんと2つのモジュールが読み込まれて、人と動物の歌(sing)!?が出力されています。

2行を1行にできる

lesson.pyに記述している、2つのモジュールを読み込んでいる2行をアスタリスクを使って1行にすることが可能で、最初の2行を削除して、次の1行に変更します。

from package import *

次に、packageフォルダ内の__init__.pyに次の1行を記述します。

__all__ = ['animal', 'human']

lesson.pyは次のようなコードになり、実行結果も先程の結果と同じになります。

from package import *

print(human.sing())
print(animal.sing())

出力結果

singing
Wooooooo!092jpjslkjfiowjrf!!!

packageフォルダを参照したときに、最初に読み込まれるモジュールが__init__.pyだと以前説明ました

*importのあとに記述することによって、__init__.pyの中の__all__で指定されたリスト['animal', 'human']によって、モジュールを複数読み込めるようになります。

初級者のわたしからすると、フォルダ内のすべてのファイルを読み込めるんだから便利〜!となってしまうのですが、いちいちどんなモジュールがあるのか__init__.pyへ記述する必要があって、さらにコードを読む側からすると、どんなモジュールがインポートされているのかわからないので、こんな使い方はNGだそうです。

個人使用なら自由?

Pythonのコード記述はいろいろと暗黙のルールがあって、面倒そうだなと思う反面、きっちりとしたルールがあるから、誰もが理解しやすくて、複数人のチームでプログラムを書くのに適した言語だと思います。

それじゃあ、個人でしか使うことがなければ、暗黙のルールを無視して、コードを書いてもいいんじゃないと思う人もいるかもしれません。

もちろん、そのコードでプログラムが動いて、自分だけしか使わないというのなら、問題はありませんが、たくさんのコードを書いていくうちにきっちりと決まったルールに従って書いたほうが最終的にわかりやすいという結果にたどり着くのは間違いありません。

だって、私たち学習者が想像できないような量のコードを書いてきたプログラマーの人たちの叡智が集結されたものがプログラム言語なわけなので、ちょっとPythonをかじったくらいのなんちゃってプログラマーやPython学習を始めた初心者が考えることなんて、とっくの昔に検討されているわけです。

ようするに、Pythonを極めたいのなら、基本に忠実にルールに従ったコードの書き方をきちんと学ぶのが、Pythonをマスターするための最短ルートだということです。

このことを踏まえて、明日からもPythonを学習していきたいと思います。

ではでは、明日もGood Python!