Hobby Lab 趣味のモノ作り実験のサイトです。
Software プログラミング Python Note
Pythonとは
import
from import 省メモリ
関数の書き方
__name__
if _name_=="_main_":
時間-文字変換
bytesからINTへ変換に注意

Sf:Programming関係
C 関係
 C言語でプログラムミング
Python 関係
はじめに
 RaspberryPi開始
 Windows開始
共通事項
 プログラミングNote
 パッケージ導入 pip
 標準ライブラリ
 Serialライブラリ
 SMBusライブラリ
HTML関係
 開始とNote
Sf:OS関係
SfO:Mint 関係
 PCへMint導入
 アプリ導入
 その他1
 アイコンを作る
SfO:Ubuntu 関係
 PCへUbuntu導入
 アプリ導入
SfO:RaspberryPi 関係
はじめに
 RaspberryPiへOS導入
 アプリ導入
 Programming
シェル・コマンド関係
 LXTerminal
 sed
 i2ctools
I/O・アプリ関係
 RealVNCとViewer
 IO動作確認
 MySQL
 Python
 raspberrypiハード
Sf:Server 関係
SfS:レンタルサーバー
 CORE-X
SfS:Windowsサーバー
 XAMPPの概要と導入
 Note XAMPP
 Note XAMPP Err
 Note Apache
 Note PHP
 Note MyQSL
Sf:IDE 開発環境
SfI:STM32
 STM32CubeIDEでプログラム
 HALと直接レジスター操作の速度
SfI:CH32
 MounRiver Studioでプログラム
SfI:Arduino
各ボード毎の設定
 Uno 設定
 Mega2560 設定
 DUE_CH340 設定
 ESP_WROOM02 設定
 ESP12F_D1mini 設定
 ESP32 設定
 CH32V 設定
ライブラリー
 OneWire使い方
その他
 日本語リファレンス(外部リンク)
 WiFi Macアドレスを調査
Sf:AP アプリ関係
SfA:エディタ
SfA:回路図CAD
SfA:回路シミュレータ
 シミュレーションの設定
 色の設定
 電源設定設定
SfA:リモートソフト
Sf:Pt プロトコル関係
SfPt:MODBUS
Sf:Otgers その他

■ Pythonとは

Python(パイソン)は、オランダのプログラマーであるグイド・ヴァンロッサム氏によって開発されたオープンソースのプログラミング言語です。
読みやすい構文で、少ないコード量でプログラミング初心者でも学びやすく、さまざまなプラットフォームで実行できることが特徴です。
このため Raspberry Pi(ラズパイ)でも標準でインストールされています。
Pythonの主な特徴は次のとおりです。

少ないコードで簡潔にプログラムを書ける。
インタプリタ型言語のため、コードの修正や確認、実行が容易。
統計処理や数値計算を得意とする。
AI開発に必要な計算や統計処理機能をまとめたライブラリが豊富。
またPythonは、ウェブアプリケーション、ソフトウェア開発、データサイエンス、機械学習(ML)など幅広い用途で利用されています。
ただし、Pythonはインタプリタ型の言語のため、コンパイラ型よりも実行速度が遅いというデメリットもあります。
企業などで使われる基幹システムや、大規模なシステム開発、処理速度の速さが必要となるゲーム開発などには不向きです。





■ import

プログラムを簡単に書くために、すでに開発されているプログラムを利用するためのものです。
例は sample.py を import してsmple内のライブラリ sample_func()を呼び出すものです。
下記プログラム書いて sample.py の名前で保存します。
また下記プログラムを書き sample2.py の名前で保存します。
次に sample2.py を実行すると。
tryday@tryday:~/Python_soft $ spython sample2.py
sample func=
tryday@tryday:~/Python_soft $
と言う結果になります。




■ from import で省メモリ

import 〇〇 とfrom 〇〇 import △△の違いは〇〇の中に△△の関数や関数の集合体が含まれている場合に 〇〇全てをインポートするとメモリー等に〇〇全てが読込まれるため from を使って使用するメモリーを少なくすることが出来る。





■ 関数の書き方

(1) while やif文について 複数のプログラムが入る場合は、ブログラムを同じX軸位置にそろえる。
(2)サブルーチン def ~ return を使用する場合はメインプログラムの上段に記載すること。 下記例のプログラムはBME280(気温/温度/湿度センサー)コントロールプログラムです。




■ __name__ とは

__name__は変数でinportされた場合に呼び出された名前が入る。
ファイルを実行した場合は __name__ 変数に __main__ が入る。
下記プログラムを sample.py の名前で保存する。

次に sampl.py を実行すると。
tryday@tryday:~/Python_soft $ spython sample.py
sample func=
__main__

tryday@tryday:~/Python_soft $
変数には __main__ が入力されていることが判る。
次に sample.py を下記の様にsample_func()をコメントアウトして保存する。
importで使用した sample2.py
を実行すると。
tryday@tryday:~/Python_soft $ spython sample2.py
sample func=
sample
M
tryday@tryday:~/Python_soft $
importされた名前が __name__ に入力されたことが判ります。




■ if __name__ =='__main__':とは

この文は import するファイル単品でも実行文を動作させたい場合に使用します。
変数 __name__ の動きが判れば解決します。
下記プログラムを sample.py で保存する。

また下記プログラムを sample2.py で保存し
sample2.py を実行すると。
tryday@tryday:~/Python_soft $ spython sample2.py
sample func=
sample
sample func=
sample
M
tryday@tryday:~/Python_soft $
sample2.py の print文の部分が2回実行されています。
これは sample2.py 内の import した時に sample.py の メインルーチン sample_func() で関数[ def sample_func(): ]を実行させ関数内部のprint文で印刷
続いて sample2.py 内の sample.sample_func() で import した sample.py の 関数[ def sample_func(): ]を実行させ関数内部のprint文で印刷されるためです。
上記の内 import した時にメインルーチンを実行させないように下記プログラムを書いて sample.py で保存する。

このプログラムを実行した場合は
tryday@tryday:~/Python_soft $ spython sample.py
sample func=
__main__
M
tryday@tryday:~/Python_soft $
となります。
また sample2.py を実行すると。
tryday@tryday:~/Python_soft $ spython sample2.py
sample func=
sample

tryday@tryday:~/Python_soft $
となります。 これは sample2.py で sample を import しても __name__ 変数の内容が __main__ では無く、sample なのでプリント実行文は実行されず、sample2.py の sample.sample_func()文だけで印刷されるようになったためです。




■ 時間変数を文字変数へ変換する方法

時間型 nw = datetime.datetime.now() を 文字型へ変換 nw.strftime('%Y/%m/%d %H:%M:%S')




bytesからINTへ変換に注意

シリアル通信の受信データは bytes型 のデータです。
その中で Windows の Python(3.13.2) ではエラーが出なかったのですが、RaspberryPi 2 の Ptyton(3.9.2) ではエラーとなりました。
エラーは 1byte 受信してそれを INT型 へ変換するもので下記に相当するプログラムを書き、実行して同じエラーが出ている。

 TypeError: from_bytes() missing required argument 'byteorder' (pos 2)

2番目の引数が無いと言う事でエラーになっており、エラーを出ないようにするには 1byte でも'big' 又は 'little' を指定する必要がある事が判った。


なお複数byte の場合の'big' 又は 'little' を以下に示す。


'big'と'little'指示した時の答えの違い
big little
b 0x02 0x03 0x05 0x02 0x03 0x05
Hex 0x020305 0x050302
Dec 131845 328450






































更新日 2025/11/25 19:33  管理者 平林 剛Hirabayashi Takeshi