Home > Windows にまつわる e.t.c.

Python の文法


PowerShell な人種が Python やってみたシリーズの 02 です。

今回は Python の文法編です。

 

ブロック

PowerShell でのブロックは、こんな感じで { } で括りますよね。

if( $hogehoge -eq 10 ){
    # 処理 01
    # 処理 02
    # 処理 03
}

 

Python では、: で終わる行に続いてインデントされた部分がブロックになります

if hogehoge == 10 :
    # 処理 01
    # 処理 02
    # 処理 03

 

PowerShell のインデントは読みやすさを実現するためのものですが、Python では「インデント」が意味を持っています。

Python では、: のある行を「ヘッダー」、以降の部分を「スイート」と呼びます。

1つのヘッダーに続くスイートのセットを「節」と呼びます。

PowerShell では、if 文と言ったりするので、「文」と同じ意味ですかね。

ちなみに、Python 3 では、インデントにタブかスペース(4つ)のいずれでも良い事になっていますが、混在して使うことは禁止されています。

 

クォーテーション

PowerShell では、変数が展開されるダブルクォーテーション( " " )と、変数が展開されないシングルクォーテーション( ' ' )とで意味が違いますが、Python では同じ意味なので、好きに使えます。

 

行を分けて書く

PowerShell で行を分けて書く場合は、` を使用しますが、Python の場合は \ (Linux とかではバックスラッシュ)で行を分割して記述することができます。

Python の場合、クオーテーションで囲った文字を並べると、1つの文字列に連結するので、長い文字列を記述するときには以下のようにすることが可能です。

b = "https://www.amazon.co.jp/" "dp/" "4798113808/"

 

この仕様を使うと、以下のように長い文字列を分割して書くことができます。

b = "https://www.amazon.co.jp/" \
    "dp/" \
    "4798113808/"

 

変数

PowerShell の変数は、先頭に $ を付けますが、Python では何もつけず、予約語以外は全て変数として使うことができます。
(ちなみに、Python では、予約語を「キーワード」と呼びます)

 

数字から始まる変数名は使えません。

PowerShell と違い、Python では変数の大文字/小文字を区別するので、PowerShell 感覚でラフに書くと思わぬトラブルになります。

Python では、ImportData のように、変数は大文字から始まる CapWords ネーミングがルールです。

アンダースコアもよく使うので、ImportData_01 みたいな使い方も良いですね。

長い変数名は嫌われる傾向にあるので、長い変数名書かないようにする方が良さそうです。

 

オブジェクト

PowerShell と同様に、Python の変数もオブジェクトの性質を持っています。

変数がどのような型なのかは、type() を使います。

PowerShell の .GetType() と同様ですね。

 

メソッドとアトリビュートは PowerShell なら Get-Member でが簡単にわかるのですが、Python ではそこまで便利な機能は無いようです。

変数にどんなメソッドとアトリビュートが含まれているのかを調べるのは、PowerShell の Get-Member ような便利機能は持っていないので、ちっとコードを書きます。

obj = "aaa"

for x in dir(obj):
    print(x)

 

ミュータブル、イミュータブル

Python では、値を変更できるオブジェクトを「ミュータブル」、値を変更できないオブジェクトを「イミュータブル」と呼びます。

 

if

if は PowerShell とほぼ一緒です。

PowerShell Python
if if
else else
elseif elif

 

こんな感じに書きます。

if [条件] :
   #処理
   
elif [条件] :
   #処理
   
else :
   #処理

 

switch

Python に switch はありません。

if else elif で書きます。

 

すべての要素を回す for

for は PowerShell と少々違うので面食らう所です。

PowerShell で言うところの foreach を for で表現します。

for [変数] in [配列] :
    # 変数の処理

 

インデックスでコントロールする for

Python の for は、PowerShell の foreach の性格なので、for($i; $i -lt $Max; $i++) のような書き方が出ません。

さて、ここで頭の体操です。foreach な for を使って、PowerShell な for を書くにはどうしたら良いでしょうか?

完全に同じではありませんが、同様の事をするのには、連続する整数を用意して回せばいいことになりますね

つまり、こう書けば良いのです。

foreach( $i in (0..9)){
    Write-Output $i
}

 

Python では (0..9) の代わりに range(start, end) を使います。

end で指定した値の1つ前(for で -lt を指定したイメージ)になるので (0..9) を Python で書くと range(10) となります。

start を省略すると、0 を指定したことになります。

for i in range(10):
	print(i)

 

生成した整数値の配列で回しているのので、ループ内でインデックスを編集する処理には使えません。
(インデックス値を比較しているわけではないので)

 

break / continue

break / continue も PowerShell と同じです。

 

while

while は PowerShell と同じです。

while [条件] :
    # 処理

 

for($i = 0; $i -lt 10; $i++) と同じ事をする場合は、while を使って、自分でインデックスをインクリメントします。

i = 0
while i < 10 :
    print(i)
    i += 1

 

do while

Python には do while がありませんので、以下のように if else を使って自力でループコントロールを書きます。

while True:
    # 処理

    if [条件]:
        continue
    else:
        break

 

while else

while else は PowerShell に無い構文で、while 条件が false になった時に else が実行されます。

while [条件] :
    # 処理
    
else :
    # 条件が false になった時に実行される処理

 

else は条件が false になった時に処理されるので、break の時はスキップされ実行されません。

 

比較演算子

比較演算子は C/C++ ぽいです。

PowerShell Python
-eq ==
-lt <
-le <=
-gt >
-ge >=
-ne !=

 

論理演算子

論理演算子も C/C++ ぽいです。

PowerShell Python
-and and
-or or
-not not

 

算術演算子

算術演算子は PowerShell と同じですが、PowerShell には無い「整数除算」や「べき乗」が算術演算子として用意されています。

PowerShell Python
+ +
- -
* *
/ /
% %
[Math]::Truncate() //
[Math]::Pow() **

 

スタンダードなコーディングスタイル

Python には公式でコーディング規約が決められています。

好き勝手に書くのではなく、公式のコーディングスタイルに従ってコードを書くのがルールです。
(ビジネスチームとしてローカルスタイルが決められていることもあるようですが....)

■ 公式コーディング規約

PEP 8 -- Style Guide for Python Code
https://www.python.org/dev/peps/pep-0008/

 

■ 有志による PEP 8 の日本語翻訳

PEP8 日本語版
https://pep8-ja.readthedocs.io/ja/latest/

 

ちなみに、PEPとは Python Enhancement Proposal の略です(意味合いとしては公式ガイダンスって感じですかね)

PEP 0 -- Index of Python Enhancement Proposals (PEPs)
https://www.python.org/dev/peps/

 

関連情報

PowerShell な人種が Python やってみた
http://www.vwnet.jp/Windows/etc.asp#Python

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.