79
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPerの為のPython入門 - 超基礎

Last updated at Posted at 2014-05-10

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.')

まとめ

色々と説明し足りないものがありますが、ひとまずこんな感じで。。
次は関数のお話をしまーす。

79
83
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?