PHPerがpythonを勉強してみた。第一印象はC言語+PHPって感じ。
raspiやdeep learningなどで、サンプルコードがpythonで書かれている事も多いので、観念して勉強する事にした。
入門サイトをいくつかみてみたけど、とほほさんの所が一番よくまとまっていた。
http://www.tohoho-web.com/python/index2.html
とりあえず、pythonの独自性というか、特徴だなと思った点をリストアップしていく。
PHPが使えれば意外と簡単な感じだった(swiftの方が難しい…。)
// モジュール
pythonにおけるモジュールとは、pyファイルの事。
import test.py
のように別ファイルから読み込める。
// コメントアウト
#から改行まで。C言語やPHPの//と同じ使い方。
// 文字列
文字列に掛け算できるのは、なかなか面白い。初めて見た。
1 2 3 |
#encoding: utf-8 print "オラ" * 20 + "ッ!" # オラオラオラオラオラオラオラオラオラオラオラオラオラオラオラオラオラオラオラオラッ! |
トリプルクォーテーションでは改行もOK
※pythonでは、シングル・ダブルクォーテーションの区別は無い
1 2 3 4 |
str = """hello, world! goodbye""" print str |
文字列の先頭にrをつけると、エスケープ文字がそのまま出力される。Windowsパス指定の時とか便利かな。
1 2 |
print r"hello\nworld!" # hello\nworld!と出力される |
// 変数
変数宣言も型指定も無し
1 2 3 4 5 6 7 |
num = 10 str = "abc" str_num = "1" #ただし型自体はあって、自動的にキャスト(型変換)されず、エラーになる print num + str_num # TypeError: unsupported operand type(s) for +: 'int' and 'str' |
// タブ(字下げ)がブロック代わりになっている!(これが一番独特だ!)
phpやC言語の場合
1 2 3 4 5 |
if(a==0){ print "abc"; print "xyz"; } print "def"; // ←←←if文の対象外(必ず実行される) |
pythonの場合
1 2 3 4 |
if a==0: print "abc" print "xyz" print "def" # ←←←if文の対象外(必ず実行される) |
これは斬新! 「見た目=構造」って事ね。
確かに変なインデントとかする人もいるので、こちらの方がいいかも!?
// 制御文
if/for/whileの3種類のみ(switch-caseは無い)
条件式は()で囲まずに、最後に:をつける(忘れそう…。)
1 2 3 4 5 6 7 8 9 10 11 |
if a == 0: 処理A elif a == 1: 処理B else: 処理C for i in range(0, 10): #for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: と書いても同じ print i |
while文は普通なので省略
// 関数
funcやfunctionではなく、defで定義する。
関数定義は先じゃないとダメ!最後のコロン(:)を忘れそう。
※関数ブロックの最初の1行目は、javadocみたいに関数の説明が書き込めます
通常は、トリプルクォーテーションで複数行書くみたい。
関数以外にも、モジュール(pyファイル)やクラスの一行目に説明が書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#encoding: utf-8 def add(a, b): "ここに関数の説明(ドキュメンテーション文字列)を書く" return "result is ", a + b # 戻り値は複数あってもOK! x, y = add(1,2) print x # result is print y # 3 #モジュール名・クラス名・関数名の後ろに .__doc__ と付けると説明を返す print add.__doc__ # "ここに関数の説明(ドキュメンテーション文字列)を書く" と表示される |
// 配列(リスト)
pythonでは、配列という言い方はせずに、リストと言うみたいです。
配列は違って、大きさを最初に宣言しなくて大丈夫なのが良い!(可変長配列)
また、型が混合していてても良い(pythonでは全てオブジェクトだから)
1 2 3 |
list = ['a', 10, 'b', 20, 'c', 30] print list[0] # a print list[1] # 10 |
当然、多次元配列にも対応している。
リスト以外にも、以下の様な配列チックな機能がある
タプル(定数的な固定配列)
ディクショナリ(連想配列)
セット(同じ値は重複不可)
備考:
コマンドライン上で、引数無しのpythonと入力すると対話モード(一行入力するたびに実行されて結果が返る奴)が実行されるのだが、raspiにssh接続のせいか、ctrl+Dで終了させようとすると固まって何も出来なくなってしまう…。(再接続するしかない)
解決策としては、exit() とタイプすれば良いみたい。
いや~、それにしても、新しい言語を覚えるのは楽しいですね(爆)