Pythonの構文(前半)


こんにちは、切口太郎です。

今回は、Python の構文(文法)についてです。

Pythonの構文はかなりシンプルにできていますので、簡単なルールを覚えてしまえば、あとはパターン形式で書くことができます。
Python の良いところは簡単なところです。

Python の構文では5つのポイントについてお話します。

1 構文の基本
2 コメントの書き方
3   外部プログラムを呼び出す import 文の使い方
4 条件分岐
5 ループ

前半では1-3についてお話します。


1 構文の基本


短いサンプルプログラムを見てみましょう。
'''
Python Syntax
ここは、コメント
'''

# 外部プログラムの呼び出し
import sys

# 関数の定義
def get_platform(mes):
    return mes  + sys.platform

# 実行開始
platform = get_platform("platform is ")
print(platform)
Windows で実行すると、このように表示されます。

platform is win32

それでは、ソースの解説です。

1行目から4行目までは、コメントです。
シングルクォーテーションが3つ 記述すると、次のシングルクォーテーションが3つの記述があるまで、Python はコメントとして扱います。
ファイルの先頭には、そのソースファイルの内容などを記述したコメントを記述します。

6行目は1行コメントです。
Python は、シャープ(#) から後ろをコメントとして扱います。
Python のコメントは、2種類あります。

7行目は、外部プログラムを呼び出す import 文です。

import 文は、厳密には、利用する直前に記述すれば良いので、ファイルの先頭に記述する決まりはありませんが、慣習で利用するものはファイルの先頭でまとめて記述します。

10行目は関数の定義です。
関数は、def で始まります。

関数の記述はオフサイドルールに沿って記述します。
オフサイドルールについては、このブログのアーカイブ[6] ガンガンPythonする、その前に! に説明があります。
よろしければ、ご参照ください。

11行目は、7行目で import した sys を利用しています。
sys は、OSや Python インタープリターへの情報へアクセスできます。
sys.platform は、動作しているOSの簡略名が得られます。
引数の mes に設定されている文字列とOSの簡略名を結合した文字列を返しています。

14行目は、関数を呼び出しています。
関数の引数で、"platform is" を渡しています。
10行目の関数の引数 mes にこの文字列が設定されます。

15行目は、関数 get_platform からの戻り値を表示します。


Python の基本的な構文はこのような形です。

大きなプログラムになれば、関数の数が増えたり、ソースファイルが大きくなれば、ファイルを分割したりします。
分割したファイルの関数を呼び出す場合には、import 文を追加します。

基本のパターンは、変わりませんので、この形式を覚えておけば、コーディングができるようになります。


2 コメント

ソースファイルのコメントは、もちろん記述しなくてもプログラムは書けますが、大きなプログラムを書いた時や多人数で共同でプログラムを作る場合には必要です。
できるだけ、コメントを記述するように習慣つけましょう!

インタープリター型の言語では、実行時にコメントも行として参照するので、実行速度に若干の影響があります。
大昔(7年くらい前でしょうか)に Python を始めた時に、大先輩から「コンパイラーと違うからコメントをできるだけ少なくするように!」とソースレビューで指摘された時があります。

今では、コメントがたくさんあるために、実行速度が人間が体感できる程に遅くなるようなコンピューターはありませんので、ソースのコメントはガンガン入れてもいいでしょう!

Python のコメントの記述は、先のサンプルソースのように2種類あります。

コメントの種類
記号
説明
ブロックコメント
''' (シングルクォーテーション3つ)
""" (ダブルクォーテーション3つ)
複数行にまたがるコメントを記述します。
コメントの開始に、''' を記述して、コメントの終了にも ''' を記述します。
1行コメント
# (シャープ記号)
行の途中にコメントを入れます。
# 以降の文字がコメントとして扱われます。
2種類あると、どちらを使うか迷うところですが、通常は、1行コメントを利用すればいいと思います。
ブロックコメントは、ソースファイルの先頭(ファイルヘッダー)や、関数などの説明が長くなる部分に限定して入れればよいと思います。

Python にも、java のようなソースのコメントから自動的に HTML ドキュメントを作成する Sphinx というプログラムがあります。
コメントは Sphinx のルールに従って作成するのもいいと思います。

Sphinx を使用した簡単なコメントの例です。
def add(left , right):
    """add 数値の加算
    
    [引数の2つの数値を加算して返す ]
    :param left: [加算される数値 ]
    :type left: [integer]
    :param right: [加算する数値]
    :type right: [integer]
    :return: [加算結果]
    :rtype: [integer]
    """
    return left + right


def minus(left , right):
    """minus 数値の減算
    
    引数の2つの数値を減算して返す
    
    :param left: 減算される数値
    :type left: integer
    :param right: 減算する数値
    :type right: integer
    :return: 減算結果
    :rtype: integer
    """
    return left - right

3 import


外部のファイルを利用する場合に使います。
外部のファイルとは、別のソースファイルや、ライブラリーやフレームワークの Pythonプログラムです。

Python は前方参照型の言語というお話をしましたが、import 文も外部ファイルのプログラムを利用する前に記述する必要があります。
記述する場所は、「プログラムを利用する前」なので、直前でも、ファイルの先頭でも問題ありませんが、外部のライブラリーやフレームワークを利用する前は、ファイルの先頭部分ですべて宣言するほうが安全です。

import 文は次の2種類の構文があります。

同じパッケージ内のオブジェクトをインポートする
import モジュール名
import mypack
異なるパッケージのオブジェクトをインポートする
from パッケージ名 import モジュール名
from mypack import src01

  

ASの使い方


Import 文には as を使って別名で登録することができます。

import pandas as pd

こちらは、Python といわず、プログラムを作る時にとっても便利な Python の pandas パッケージのインポート文の例です。
pandas を使っていると、大体このように as を使用して短い名前に変更しています。

タイプ数が減るので、便利といえば便利なのですが、pandas が pd になってもそれほど効果ないかなと思っています。

ただ、この as の機能がとても有効に利用できるケースを仕事で体験することができました。

とあるシステムの開発をしている時に、そこのプロジェクトには、モジュールの命名規約がありました。
そこには、「名称は英文を省略しないでそのまま記述して、可読性を上げること」というのがありました。

例えば、管理サーバーからユーザーの現在の状態を取得するモジュールの名前は、current_status_from_management_server.py という名前です。
モジュール名は、current_status_from_management_server
import from current_status_from_management_server

if current_status_from_management_server.get_user(user_context):
    #ユーザが存在する処理
else:
    # ユーザーが存在しない処理

このように、かなり冗長にコーディングしないといけません。なんか、可読性が下がっているような気がします。
import from current_status_from_management_server as stssvr

ifstssvr.get_user(user_context):
    #ユーザが存在する処理
else:
    # ユーザーが存在しない処理
こういう時に as が便利です。

as を使いましょう!

次回は、Python の条件分岐、ループについてです。

コメント

このブログの人気の投稿

Python のファイルアクセス

Lambda について

Visual Studio Code での Python 開発のポイント