PowerShell な人種が Python やってみたシリーズの 02 です。
今回は Python の文法編です。
PowerShell でのブロックは、こんな感じで { } で括りますよね。
|
Python では、: で終わる行に続いてインデントされた部分がブロックになります
|
PowerShell のインデントは読みやすさを実現するためのものですが、Python では「インデント」が意味を持っています。
Python では、: のある行を「ヘッダー」、以降の部分を「スイート」と呼びます。
1つのヘッダーに続くスイートのセットを「節」と呼びます。
PowerShell では、if 文と言ったりするので、「文」と同じ意味ですかね。
ちなみに、Python 3 では、インデントにタブかスペース(4つ)のいずれでも良い事になっていますが、混在して使うことは禁止されています。
PowerShell では、変数が展開されるダブルクォーテーション( " " )と、変数が展開されないシングルクォーテーション( ' ' )とで意味が違いますが、Python では同じ意味なので、好きに使えます。
PowerShell で行を分けて書く場合は、` を使用しますが、Python の場合は \ (Linux とかではバックスラッシュ)で行を分割して記述することができます。
Python の場合、クオーテーションで囲った文字を並べると、1つの文字列に連結するので、長い文字列を記述するときには以下のようにすることが可能です。
|
この仕様を使うと、以下のように長い文字列を分割して書くことができます。
|
PowerShell の変数は、先頭に $ を付けますが、Python
では何もつけず、予約語以外は全て変数として使うことができます。
(ちなみに、Python では、予約語を「キーワード」と呼びます)
数字から始まる変数名は使えません。
PowerShell と違い、Python では変数の大文字/小文字を区別するので、PowerShell 感覚でラフに書くと思わぬトラブルになります。
Python では、ImportData のように、変数は大文字から始まる CapWords ネーミングがルールです。
アンダースコアもよく使うので、ImportData_01 みたいな使い方も良いですね。
長い変数名は嫌われる傾向にあるので、長い変数名書かないようにする方が良さそうです。
PowerShell と同様に、Python の変数もオブジェクトの性質を持っています。
変数がどのような型なのかは、type() を使います。
PowerShell の .GetType() と同様ですね。
メソッドとアトリビュートは PowerShell なら Get-Member でが簡単にわかるのですが、Python ではそこまで便利な機能は無いようです。
変数にどんなメソッドとアトリビュートが含まれているのかを調べるのは、PowerShell の Get-Member ような便利機能は持っていないので、ちっとコードを書きます。
|
Python では、値を変更できるオブジェクトを「ミュータブル」、値を変更できないオブジェクトを「イミュータブル」と呼びます。
if は PowerShell とほぼ一緒です。
PowerShell | Python |
if | if |
else | else |
elseif | elif |
こんな感じに書きます。
|
Python に switch はありません。
if else elif で書きます。
for は PowerShell と少々違うので面食らう所です。
PowerShell で言うところの foreach を for で表現します。
|
Python の for は、PowerShell の foreach の性格なので、for($i; $i -lt $Max; $i++) のような書き方が出ません。
さて、ここで頭の体操です。foreach な for を使って、PowerShell な for を書くにはどうしたら良いでしょうか?
完全に同じではありませんが、同様の事をするのには、連続する整数を用意して回せばいいことになりますね
つまり、こう書けば良いのです。
|
Python では (0..9) の代わりに range(start, end) を使います。
end で指定した値の1つ前(for で -lt を指定したイメージ)になるので (0..9) を Python で書くと range(10) となります。
start を省略すると、0 を指定したことになります。
|
生成した整数値の配列で回しているのので、ループ内でインデックスを編集する処理には使えません。
(インデックス値を比較しているわけではないので)
break / continue も PowerShell と同じです。
while は PowerShell と同じです。
|
for($i = 0; $i -lt 10; $i++) と同じ事をする場合は、while を使って、自分でインデックスをインクリメントします。
|
Python には do while がありませんので、以下のように if else を使って自力でループコントロールを書きます。
|
while else は PowerShell に無い構文で、while 条件が false になった時に else が実行されます。
|
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
Copyright © MURA All rights reserved.