麻布十番で働くデータ分析者のブログ

グロースハック、プログラミング、データ分析の色々を発信します

Pythonチュートリアルをやってみる その2

 

f:id:nimi0370376:20170705025553j:plain

 

引き続きPythonチュートリアルをやっていきます。

ちなみに前回のは下記リンクから飛んでください。

 

nimi0370376.hatenablog.com

 

 

前回は、Pythonの導入とインタプリタの起動と、簡単な計算問題までやりました。今回はその続きからです。

 

4章 制御構造ツール

今回は、whileとかifとかforとかやっていきます。ちなみに制御構造ツールというのは難しく言っているけど、いわゆるforとかいうやつ。

 

4-1 for 文

Pythonのfor文は以下のように書くことができる。

 

>>>words = ['cat','window','defenestrate']

>>>for w in words: #wordsリストをwとしてループにかける

...    print(w,len(w)) #wとwの長さを返す

...

cat 3

window 6

 defenestrate 12

 

4-2 range() 関数

range関数は、連続する数字をforで回すことができる。以下のように。

 

 

f:id:nimi0370376:20170705112614p:plain

 

 

4-3 for文とcontinue

continue文はC言語にもあるらしく、ループの残りを飛ばして次回の反復にいくらしい。つまりはelseと同じような働き

 

>>> for num in range(2,10): #2~10まで連続でループ
...    if num % 2 == 0: #もし2で割り切れるならば
...      print("Found an even number",num) #左を出力
...      continue 
...     print("Found a number",num) #それ以外は左を出力(飛ばしてね)
...
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9

 

 

4-4 関数の定義

Pythonでは、rubyと同様に自分で関数を作ることができる。今まではforとかrangeとか決まった動きしかできなかったけど、自分で作れば自在にオブジェクトを操れる。

Pythonにおける関数の定義は以下のようになる。今回は、フィボナッチ級数を任意の上限まで書き出す関数を定義する。

 

>>> def fib(n):
...     """nまでのフィボナッチ級数を表示する""" #docstring
...     a,b = 0,1  #a,bに0と1を入れる
...     while a < n: #nがaより大きい間はループを回す
...       print(a,end=' ') #aとループの終わりを返す
...       a,b = b,a+b #aとbはbとa+bの値である。始まりは先ほどの0と1
...     print() #これで返す
...
>>> fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

 

 

docstringは、関数のドキュメンテーション文字列であり、コメントの代わりになっている。これは、入れておくと良い習慣らしい。学び

 

またPythonの関数は、他のオブジェクトにもフレキシブルに対応できるのが優れているらしい。

 

例えば

 

>>>f = fib

>>>f(100)

0 1 1 2 3 5 8 13 21 34 55 89

 

 

よって一々関数を書きなさなくても、そのまま使えるのだ。

 

4-5 キーワード引数について

関数には、キーワード引数というやつがあるらしい。「キーワード = 値」の形になっているものがそれに当たる。

簡単な例でいくと以下のやつ

 

parrot(1000) #位置引数1個

parrot(voltage = 1000) #キーワード引数1個

 

つまりキーワードの入っているものが扱えるのだ。

これを応用すると下記のようなものが扱える。

 

 

 

f:id:nimi0370376:20170705112518p:plain

 

defで関数を定義する。今回はkindとargumentsとkeywordsで定義する。

まず、--Do you have any "kind"?と--I'm sorry,we're all out of "kind"を返す。

 

また、ここでargをループで回す。

keysには、ソートされたkeywordsとkey()が入る。

最後にkwをkeysの中でループし、出力する。

 

 

この関数を実際に使ってみよう。

 

cheeseshop("Limburger","It's very runny,sir.",

                    "It's really very, VERY runny, sir.",

                    shopkeeper = "Michael Palin",

                    client = "John Cleese",

                    sketch = "Cheese shop Sketch")

 

 

以下を返す。

 

 

f:id:nimi0370376:20170705112438p:plain

 

 

4-6 lambda(ラムダ)式

キーワードlambdaを使うと小さな無名関数を扱うことができる。

 

f:id:nimi0370376:20170705112356p:plain

  #lambdaでxをx+nに変換する

 

 

 

 

4-7 Pythonのコーディングスタイル

そろそろもっと長い、もっと複雑なものをPythonで書こうとしている。ここで筆者は、Pythonを書くときの重要な8つの指標を与えてくれている。

 

  • インデントはスペース4つとし、タブは使わない
  • 4スペースは狭くもなく、広くもないちょうど良いインデントになる
  • 79文字以下で行を折り返すこと。これはディスプレイの大きさ的にちょうど良い
  • 可能であればコメント行は独立させる
  • docstringを使う
  • 演算子の周囲やカンマの後ろにはスペースを入れるが、カッコのすぐ内側には入れない
  • クラスや関数には一貫した命名を行う
  • UTF-8かASCIIでPythonを書く