2019/03/25

Python tutorial(前編)

みなさんおはようございます。
この記事はこちらの続きとなっております。

はじめに

というわけで、前回の記事で構築した実行環境を使いながら、Python tutorialを進めてみました。
内容としては比較的経験や知識の多いRubyなどと比べたりしながら、個人的に思ったことなどをまとめています。

ただ、触ってるうちに「これ実際にアプリケーション作る方向に倒した方が良いんじゃね」と思ってしまい、7章以降はざっと流し読みした程度になっています。

タイトルが「前編」となっているのはそのためですが、後編の更新予定は今のところありません。今後にご期待ください。

触りながら思ったことなど

ここからは実際に動かしながら思ったことをまとめていきます。

文字列が不変

Pythonでは一度変数に代入された文字列を編集することが出来ないそうです。

>>> word = "Python"
>>> word[2] = "a"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

新たな文字列が必要な場合は新たな変数を用意する必要があるそう。
確かにそういうコードは汚れがちなので、仕様としてはわりと助かるのかな。

長さチェックの関数

長さチェックの関数は len()。しかし word.len() ではなく len(word)

>>> word = "Python"
>>> word.len()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'len'

>>> len(word)
6

どうやら len() は組み込み関数らしい。rubyだとArrayやらStringやらがそれぞれ size とか持ってたので、このあたりには設計思想の違いがありそうな気配がする。

index付きのループ

Rubyで言うeach_with_index はちょっとスッキリしそう。
とは言っても、Railsやってるとそもそもそんなに使わないのはweb開発だからかな。
Pythonは数学的な使われ方が多いそうなので、そうなるとこういうのよく使うんだろうか。

 a = ["Mary", "had", "a", "little", "lamb"]
for i in range(len(a)):
  print(i, a[i])

------- 出力結果 --------
0 Mary
1 had
2 a
3 little
4 lamb

pass

Pythonでは空のクラスや変数を作ることが出来ないらしく、何がしか書かなければいけない時には pass文 なるものを置いておけるそうな。

>>> class MyEmptyClass:
...     pass
...

また、こっちの使い道は開発してる時にめっちゃ使えそう。

pass のもう 1 つの使い道は、新しいコードを書いているときの関数や条件文の仮置きの本体としてです。こうすることで、より抽象的なレベルで考え続けられます。 pass は何事も無く無視されます

>>> def initlog(*args):
...     pass   # Remember to implement this!
...

関数の代入

関数をオブジェクトとして変数に代入できるのは少しjsチックな感じ

>>> fib  # フィボナッチ数列を求める関数
<function fib at 10042ed0>
>>> f = fib
>>> f(100)
0 1 1 2 3 5 8 13 21 34 55 89

引数のデフォルト値

引数のデフォルト値は一回しか評価されないらしい。
下記みたいな感じで関数内で引数への再代入とかやるとやばそうなんだけど、どうやって折り合いつけているのだろう。

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

----------------
[1]
[1, 2]
[1, 2, 3]

moduleの定義方法

rubyで必要だったような module Hoge という構文はいらないっぽい。
メソッド群を書いたファイル名がそのままモジュール名になる感じか。

まとめ

ざっと大まかにこんな感じです。
他にもコメントの書き方の文化とか気になったところもあったりしました。
なんとなく構文の雰囲気とかは掴めたので、次回は少しアプリケーションを作る方向にチャレンジしていきたいな〜と思っています。