Yamamoto's Laboratory
 
環境設定
 
プログラム作成
  書き方
 
 
 
 
tkinter
 
 
 
 
 
 

Python基本事項プログラム作成の基本事項

Pythonでプログラムを作成するために理解すべき基本的なことについて,説明します.

目次


基本事項

  • 望ましいプログラムの文字コードは,UTF-8 です.データも UTF-8 が良いでしょう.もちろん,他の文字コードも使えます.

用語

分かり難い用語を説明します.

モジュール (module)
定義や変数,関数,クラスが書かれたファイルのことをモジュールと呼びます.ファイルの拡張子は,py です.ファイルのモジュールは,import 命令を使うことで読み込み利用できます.その場合,モジュール名はモジュールの中のグローバル変数 __name__ にセットされます.
名前空間 (namespace)
プログラムは,処理の対象である変数と処理の方法が書かれた関数 (メソッド) から構成されます.それらには名前が付けられ,プログラム中に動作の方法が書かれています.変数や関数は,コンピューターのメモリー中にビット列として実装されています.プログラムの名前からビット列への対応を示すものを名前空間と呼びます.この対応は階層構造になっており,ドットで区切られます.
 
オブジェクト (object)
英語の object は,物体や対象,目的のような意味があります.Python でもオブジェクトはさまざまな意味で使われます.とは言え共通していることは,オブジェクトはメモリーにあるデータ(ビット列)と対応しています.具体的には,変数が示す属性や値,クラスのインスタンス,関数などの全てのメモリーにあるものがオブジェクトです.クラスから作られるインスタンスもオブジェクトです.ただし,プログラムはメモリーにありますが,オブジェクトではありません.

文法に関すること

プログラミングスタイル

  • 通常,プログラムの先頭には以下を記述します.
    • シェバング  Linux では,Python の実行ファイルのパスを書きます,Linux では,第一行目に「#!/usr/bin/python3」を記述しますWindows では記述不要です.
    • エンコーディング  Linux では第二行目,Windows では第一行目に,プログラムのソースファイrの文字コードのエンコーディングを書きます.ただし,デフォルトの UTF8 の場合,記述は不要です.それ以外の文字コードの場合には「# -*- coding:エンコーディング -*-」を記述します.たとえば,EUC-JP を使う場合,「# -*- coding:euc-jp -*-」とします.
  • 関数やクラスは使用する前に,定義しなくてはなりません.これらを使うためには,オブジェクトが必要だからです.
  • エスケープシーケンスのバックスラッシュ(あるいは円マーク)を文字として使う場合には,「\\」と二つ重ねます.しかし,リテラル文字列でこれはなかなか面倒で,プログラムを分かり難くします.代わりに,引用符の前に r を付ける raw 文字列を使う分かりやすいプログラムになります.具体的には,「r"Windows\baka\file\separator"」とします.これは,「"Windows\\baka\\file\\separator"」と同じです.

コーディングについて

メイン関数みたい

Python には,メイン関数はありません.C/C++ に馴染んだ筆者には,少し気持ち悪い感じがします.このコードは,「どこから実行されるだ!!」と思ってしまいます.Python でも,実行開始行が分かるようにすることができます.

実行開始行を指定

#!/usr/bin/python3
# -*- coding:utf-8 -*-

#====================================
# main routine
#====================================
if __name__ == "__main__":

    print("Hello world !!")

変数「__name__」は,

  • モジュールで実行した場合,モジュール名が代入されます.モジュール名とは,ファイル名から拡張子(.py)を取り除いたものです.
  • 実行ファイルとして実行した場合,__main__が代入されます.

となります.

パッケージ・モジュール

説明

モジュールは,Python プログラムのファイルです.他のプログラムからこの Python プログラムを読み込めば(インポートすれば),それがモジュールになります.したがって,モジュールのファイルは「名前.py」になります.モジュールの読み込みには, import 文を使います.読み込んだモジュールのクラスや関数、変数は「モジュール名.識別子」で参照することができます.

パッケージは複数のモジュールを,ひとつのディレクトリー(フォルダー)にまとめたものです.そのディレクトリーには,初期化プログラム「__init__.py」とモジュール(*.py)から構成されます.「__init__.py」は名前の通り初期化のためのもので,無くても良いです.

読み込み (import)

プログラム中の書き方

パッケージ(モジュール)を読み込む importがいろいろとあって分かりにくいのよねー.簡単にまとめると,次のようになります.

import パッケージ/モジュール
パッケージあるいはモジュールをインポートします.
importパッケージ/モジュールas名前空間
パッケージあるいはモジュールをインポートし,その名前空間にします.
from パッケージ/モジュール import *
ワイルドカード(*)を使うことにより,パッケージあるいはモジュールの全てのモジュールあるいはクラス関数変数を読み込みます.ただし,アンダースコア (_) で始まるものはインポートされません.
from パッケージ/モジュール import パッケージ/モジュール/クラス/関数/変数
パッケージあるいはモジュールモジュールあるいはクラス関数変数をインポートします.

分かりにくければ,「Pythonのモジュールインポートのしくみ」を読んでください.

具体例

以下,具体例を示します.全ての例文で,tkinterモジュールを読み込んでいますが,名前空間が異なっています.それを,次の3つのプログラムで理解してください.それぞれのプログラムは,全く同じ動作です,

最初の例は,tykinter.py というモジュールを普通に読み込んでいます.この場合,読み込まれたモジュールの名前空間は,モジュール名 (tkinter) になります.

import tkinter

001   #!/usr/bin/python3
002   
003   import tkinter
004   
005   root = tkinter.Tk()
006   w = tkinter.Label(root, text="Hello, world!")
007   w.pack()
008   root.mainloop()

次の例は,オプションの asを用いることで,名前空間をモジュール名 (tkinter) から tk に変更します.

import tkinter as tk

001   #!/usr/bin/python3
002   
003   import tkinter as tk
004   
005   root = tk.Tk()
006   w = tk.Label(root, text="Hello, world!")
007   w.pack()
008   root.mainloop()

次の例は,モジュールに含まれるオブジェクトを実行している空間にコピーします.名前空間はコピーされた空間にになります.アスタリスクを使わないで,モジュール名を指定することもできます.この場合にはそのモジュールのみがコピーされます.

from tkinter import *

001   #!/usr/bin/python3
002   
003   from tkinter import *
004   
005   root = Tk()
006   w = Label(root, text="Hello, world!")
007   w.pack()
008   root.mainloop()

私には,二番目の方法が一番わかりやすく,プログラミングのミスも少ないような気がします.

importについては,「Pythonのモジュールインポートのしくみ」に詳しい説明があります.

ページ作成情報

参考資料

  1. Pythonのモジュールインポートのしくみ
  2. Python チュートリアルの「6.モジュール」は,importについて,大変わかりやすく書かれています.
  3. パッケージとモジュールについては,「Python入門 - パッケージとモジュール」の説明も解りやすいです.

更新履歴

2017年07月17日 ページの新規作成


no counter