【Python】構文のルール

python_logo

今回はPythonの構文についておおまかにまとめます。

おそらく、触ってくると大体は分かってくる部分なのかなぁと思います。

まぁさくっと振り返ってみましょう!

ファイルの先頭から順に読込

基本的にファイルの上から下までプログラムは実行されていきます。一行は左から右に読み込みます。

文章と同じような読み込みの流れになります。

ただし、continueやbreak文、try文などはこの実行順序を変更します。

ブロックと文は自動で検出

Pythonでは字下げすることで、どの文が同じブロックに位置するかを示します。

とくに複合文がネストされている場合に、ぱっと見て構造がわかるような作りになります。

複合文は「:」を使用する

文には単純文と複合文の二種類あります。

単純文は1行で終わりますが、複合文はヘッダー部とボディ部に分かれているので1行では通常書きません。むりやり書くことはできますが、お勧めしません。

if/elif/elseやdef,class,with,tryなどが複合文に該当します。

どんな種類があったか確認したい方は以下を参照してください。

空白行とスペース、コメントは基本無視

通常、空白行に意味はありませんが、インタープリタでは意味があります。

インタープリタで複合文を書く場合に、その複合文が書き終わったことを明示しなければなりません。空白行はその書き終わったことをインタープリタに知らせる役割をもっています。

ファイルを編集して実行している場合、上記は関係ありません。

スペースは字下げや文字列リテラルとして構成される以外は無視されます。

コメントとしての#は文字リテラルの中以外は、#から始まり行末まで全て無視されます。

docstringは__doc__に格納

ファイルや関数、クラスなどのコードの先頭に置かれた文字列はドキュメンテーション文字列(docstring)と自動的に見なされます。

主に、このモジュールの役割、関数の詳細といったプログラマーにどのように使えばいいのかが書かれています。

ツールによって出力が可能なので、開発する時にはこまめに書いておくと、他の人や未来の自分自身にとってよいでしょう。

例として、以下のようにdocstringを書きます。

"""\
This is DocString.
ここに入っている文字列が__doc__に格納されます
"""

def test():
    '''
    ここに入っている文字列が属性testの__doc__に格納されます
    '''
    #test用の関数です.
    print('test')


if __name__ == '__main__':
    print(__doc__)
    print(test.__doc__)

~                                    

実行すると以下の結果が得られます。


This is DocString.
ここに入っている文字列が__doc__に格納されます


    ここに入っている文字列が属性testの__doc__に格納されます
    

注意点・Tips

字下げはタブでも可能

字下げはタブでもできます。
その場合でも同じブロックは同じように字下げをしましょう。

ただし、タブとスペースを混在させるのはNGです。以下のようなエラーが起こります。

>>> def indenterror():
...     tab = True
...     space_4 = True
  File "", line 3
    space_4 = True
                 ^
IndentationError: unindent does not match any outer indentation level

スペースを使うのかタブを使うのかはっきり決めて、どっちかだけ使いましょう。統一するほうがエラーが起きないです.

ただ、リッチなテキストエディタを使っている場合、勝手にスペースに補完してくれるので意識しないでも大丈夫なことが多いです。

単純文が1行で終わらないケース

単純文は基本的に1行で書けます。ですが例外的な書き方もあるのも事実です。

よく見かけるのは括弧で囲んで複数行に書く場合とトリプルクォーテーションで囲む場合でしょう。

括弧とは、(),{}, []で囲まれたものになります。これらは括弧が閉じられるまで何行でも書けます。
大抵、一行では長すぎるので複数行に分けていることが多いです。


def parentheses_test(name,
                     *args,
                     **kwargs
                    ):
    print(name)


args = ('one',
        'two',
        'three',
        'four',
        'five',
        )

args = ['one',
        'two',
        'three',
        'four',
        'five',
        ]

kwargs = {'one': 1,
          'two': 2,
          'three': 3
         }

トリプルクォーテーションは非常に長い文字列を簡単に扱うことができます。
主にhtmlやxmlを扱いたい時に使えますね。

from bs4 import BeautifulSoup

html = """
<!DOCTYPE html>
<html>
<head>
  <title>Hello World!</title>
</head>
<body>
  <h1>Full stack engineer from beginner </h1>
</body>
</html>
"""

bs = BeautifulSoup(html,'html.parser')
print(bs.h1)

また、バックスラッシュを行末に加えることでも一行とみなされます。
ですが、括弧で囲んだほうがいいでしょう。見にくいし。

x = 1000 + 3000\
         - 2000

x = ( 1000 + 3000
           - 2000
    )

複数の単純文を1行で書く

セミコロンを使えばできます。

print('Hey!'); print('this code'); print('just one liner!')

ですが、あまりお勧めしません。
一行一行書いたほうが明快で見やすくなります。

まとめ

いかがだったでしょうか?

結構重箱の隅をつつくような内容だったかもしれません。

そもそも、タブとスペースが混在したケースとか、一行に詰め込んだ書き方とか見たことありませんし。。

まぁ、知識として覚えておいてもいいと思います!
いつか、後進を育成する時に使うかもしれませんしね。

それでは今回は以上になります。

みなさんのPythonライフが向上することを祈っています!