PHPはもうある程度書けるから他の言語やってみたいなーPythonとかいいなーって思ってる人向けに、PHPとの相違点とか注意した方がよい部分をまとめてみました。
Python布教活動ですー。
Python2.7をベースに話を進めて行きたいと思います。
Hello World
何はともあれコレ。
# helloworld.py
print("Hello World!")
このファイルを以下のコマンドで実行しますです。
% python helloworld.py
% Hello World!
PHPと違ってApache経由でアクセスしたら見れるよーなんて便利機能はないので、面倒ですがコマンドラインで実行しましょう。
MacユーザーならCodeRunner便利。
基本的な記述方法
PHPとPythonで同じものを実装してみます。
<?php
/**
* 時間を指定すると、対応する挨拶を表示するよ!
*/
function greet($hour) {
if ($hour > 4 && $hour < 12) {
echo "Good Morning!" . PHP_EOL;
} elseif ($hour > 12 && $hour < 18) {
echo "Good Afternoon!" . PHP_EOL;
} else {
echo "Good Evening!" . PHP_EOL;
}
}
greet(8); // Good Morning!
greet(15); // GOod Afternoon!
greet(21); // GOod Evening!
# coding=utf8
def greet(hour):
"""時間を指定すると、対応する挨拶を表示するよ!"""
if 4 < hour < 12:
print("Good Morning!")
elif 12 < hour < 18:
print("Good Afternoon!")
else:
print("Good Evening!")
greet(8) # Good Morning!
greet(15) # GOod Afternoon!
greet(21) # GOod Evening!
1つずつ説明していきますね。
# coding=utf8って何よ?
いきなり謎のコード。
Pythonのコードの1行目に書いてあるのは何でしょう。。
# coding=utf8
実はコレがないとPythonのソースコードに日本語(マルチバイト文字)が書けません。。
Pythonはデフォルトだとソースコードの文字コードをASCII
として判断するので、 「これはUTF-8で書かれているのよ!」 と教えてあげないと読めないのです。
面倒ですがおまじない
だと思って下さいませ。
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
print("実はいろんな書き方が出来るのです。")
ちなみに#
で始まる行はPythonではコメントとして扱われます。
PHPでいうところの//
と同じですね。
変数名に $ はいらないよ
PHPで変数を定義する際には必ず変数名の頭に$
をつける必要がありましたが、Pythonでは必要ありません。
素直に変数名を書けばOK。
variable = 10
処理の最後に ; (セミコロン) はいらないよ
そのまんまです。
PHPでは処理の最後に; (セミコロン)
が必要でしたが、Pythonでは要りません。
print("お尻にセミコロンがない!!!")
関数定義の書き方が違うよ
これも見たまんま。
PHPではfunction
を使用しますが、Pythonではdef
を使います。
もう一つの相違点として、Pythonの場合は{}
が要らないです。
有名なので知ってると思いますが、Pythonはスコープの表現に{}
は使用せずインデント
を用います。
def func(argument): # 最後の : (コロン) を忘れずに!
print(argument)
if文にカッコいらないよ
if文も関数と同様に{}
ではなくインデント
でスコープの表現を行います。
また、条件式を定義する所に()
は必要ありません。
if文の最後にも: (コロン)
をつける必要があります。
if 4 < hour < 12: # コロン書くのめんどくさい!!!
print("Good Morning!")
条件式の書き方
厳密にはif文についてでは無いのですが、条件式の記述方法にも相違があります。
PHPの場合、条件式を繋ぐ場合は&&演算子
を用いますが、Pythonの場合はand演算子
を使います。
hour > 4 and hour < 12
PHPの||演算子
のPythonでの書き方は、ご想像どおりコレ。
hour > 4 or hour < 12
「あれ、上のサンプルにand演算子
出てこないじゃん。」
と思った方、Pythonでは不等号の条件式は以下の様につなげて書くことが出来るのですー便利ですー。
4 < hour < 12
ループとか配列とかの例
まずは同じことをPHPとPython両方で書いてみます。
<?php
$jobs = array(
"John" => "Guitar",
"Paul" => "Guitar",
"George" => "Bass",
"Ringo" => "Drums",
);
foreach ($jobs as $name => $job) {
printf("%s: %s" . PHP_EOL, $name, $job);
}
$names = array("John", "Paul", "George", "Ringo");
for ($i = 0; $i < count($names) ; $i++) {
printf("%d: %s" . PHP_EOL, $i, $names[$i]);
}
# coding=utf8
jobs = {
"John": "Guitar",
"Paul": "Guitar",
"George": "Bass",
"Ringo": "Drums",
}
for name, job in jobs.items():
print("{}: {}".format(name, job))
names = ["John", "Paul", "George", "Ringo"]
for index, name in enumerate(names)):
print("{}: {}".format(index, names[index])
配列とリスト、連想配列と辞書
PHPでは数字が添字の配列も、文字列が添字の連想配列もarray
で定義しますが、Pythonの場合はそれぞれlist / []
とdict / {}
を用います。
# リスト
names = ["John", "Paul", "George", "Ringo"]
names = list("John", "Paul", "George", "Ringo")
# 辞書
jobs = {
"John": "Guitar",
"Paul": "Guitar",
"George": "Bass",
"Ringo": "Drums",
}
jobs = dict( # あんまりこっちの書き方はしないかな。。
John="Guitar",
Paul="Guitar",
George="Bass",
Ringo="Drums",
)
辞書の注意点として、 要素の順番は保持されません!!!
例ではJohn
Paul
George
Ringo
の順番で要素が定義されていますが、実行結果を見てみると出力される順番が変わっていると思います。
for文の書き方
for文
もif文
と同じように()
が無く、{}
の代わりにインデント
でスコープを表現し、最後に: (コロン)
をつける必要があります。
Pythonのfor文
はPHPのforeach文
に近いです。
for($i = 0; $i < 10; $i++)
の様な所謂普通のfor文
はありません。
「どうしても書きたいよー」って場合は以下の様な感じになるかな。
for index in range(0, 10):
print(index)
リストをfor文で回す場合の注意点
リスト
をfor文
で回した場合、そのままだと要素
が返ってきてしまい、要素番号(添字)
が取れません。
names = ["John", "Paul", "George", "Ringo"]
for name in names:
print(name)
要素番号(添字)
も一緒に取りたい場合はenumerate関数
を使用します。
names = ["John", "Paul", "George", "Ringo"]
for index, name in enumerate(names)):
print("{}: {}".format(index, names[index])
辞書をfor文で回す場合の注意点
辞書
をfor文
で回す場合、要素
ではなくキー(添字)
が取れてしまいます。。
jobs = {
"John": "Guitar",
"Paul": "Guitar",
"George": "Bass",
"Ringo": "Drums",
}
for name in jobs:
print(name)
要素
とキー(添字)
両方を取得する場合はitemsメソッド
を使用します。
jobs = {
"John": "Guitar",
"Paul": "Guitar",
"George": "Bass",
"Ringo": "Drums",
}
for name, job in jobs.items():
print("{}: {}".format(name, job))
ちょっとややこしいですね。。
細々とした相違点
こまかい所だけど、とっても重要な所のお話。
nullじゃなくてNone
PHPでいう所のnull
は、PythonではNone
と書きます。
頭文字は大文字
なので注意してね。
trueじゃなくてTrue、falseじゃなくてFalse
言葉は一緒だけど、頭文字が大文字
になります。
気をつけましょうね。
!じゃなくてnot
if文
とかでよく使う打ち消しの!
あるじゃないっすか。
Pythonだとnot
になるのでご注意を。
if not result:
print('Failed.')
ただし、!=
はそのままです。
if result != True:
print('Failed.')
まとめ
色々と説明し足りないものがありますが、ひとまずこんな感じで。。
次は関数のお話をしまーす。