#前書き
筆者は、Python初心者です。覚書程度に書いているので、ご了承ください。
間違いがあれば、コメント欄にてご指摘お願いします。
#自己紹介
Twitter @konojunya
じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。
HAL大阪の新2回生です👍 (2016.4.24現在)
よくstart up系イベントに行くので、大阪らへんの方は会いましょう!
では、早速。
#初めてのPython
順番に進めていきます!
##環境
僕はMacなので、元からPythonは入っていましたが、インストールしなおしました。
Pythonには、2系。3系などありますが、僕はv2.7.11
なので、2系の書き方になります。
少し3とは、違うようなので、記事のまま動かしたい場合は、Python 2.xをインストールしてください。
僕はこのhomebrewを使ったインストール方法でインストールしました。
pythonの拡張子は、複数ありそれぞれ、意味がありますが今回は.py
だけで学習を進めたいと思います。
なお、一番最初にutf-8で書くぜ!と宣言しているほうがいいので、
# coding: UTF-8
#insert code...
Pythonはインストールすると、会話的に実行することも可能です。
コマンドラインで、python
と打つと、そこに式などを書いてすぐに実行結果を試すことができます。
終えるときはexit()
とすると、その状態から抜けることができます。
##変数
pythonでは、変数を作ることができます。
C言語やJavaのような、intとかstringとか、
javascriptやPHPのように、varも$も必要ありません。
msg = "Hello World"
print msg # Hello World
このように変数を使うことができます。
print
というのは、そのものをコンソール上に展開して表示してくれるものです。
ここで登場したのが、代入演算子です。
ここでは=
が登場していますが、数学的なイコールではないことに注意してください。
プログラミングにおいて、=
は、*「変数名と値を紐付ける、対応付ける」*というものです。
では、代入演算子はどのようなものがあるのでしょうか。
a = b # a に b を代入する
a += b # a = a + b に同じ
a -= b # a = a - b に同じ
a *= b # a = a * b に同じ
a /= b # a = a / b に同じ
a %= b # a = a % b に同じ
a **= b # a = a ** b に同じ
a //= b # a = a // b に同じ
a &= b # a = a & b に同じ
a |= b # a = a | b に同じ
a ^= b # a = a ^ b に同じ
a <<= b # a = a << b に同じ
a >>= b # a = a >> b に同じ
Pythonでは、単項演算子がありません。
なので、C言語やJavaのi++
はi+=1
に置き換えてください。
簡単な計算もしてみましょう。
plus = 5 + 3
print plus # 8
このようなときに使う足し算や、引き算などの演算子を、代数演算子と言います。
代数演算子は以下のようなものがあります。
+a # 正数
-a # 負数
a + b # 加算
a - b # 減算
a * b # 乗算
a / b # 除算
a % b # a を b で割った余り
a ** b # a の b 乗
a // b # 切り捨て除算
その他に、ビット演算子などもあります。
~a # ビット反転
a & b # AND:論理積(aもbも1のビットが1)
a | b # OR:論理和(aまたはbが1のビットが1)
a ^ b # XOR:排他的論理和(aまたはbが1のビットが1)
a << b # b ビット左シフト
a >> b # b ビット右シフト
などですね。
では、少数を交えた計算をしてみましょう
plus = 5 + 3.0
print plus # 8.0
今回は同じ5+3なのに、答えが8.0です。
これは、3を3.0と表記することで、少数になるので、
答えもその少数に合わした形になります。
では、日本語をprintしてみましょう
useless = u"無駄だ。"
print useless # 無駄だ。
日本語を扱うときの注意点で、日本語を扱うときは先頭にu
をつけてください。
unicodeのuなんですが、これがないと後々、文字列の長さなどを上手く測れなくなってくるので、絶対につけるようにしてください。
##文字列
さて、もう既にわかる人にはわかりますが、文字列です。
"ダブルクォーテーション"
か'シングルクォーテーション'
で囲みます。
代入は上記の通りなんですが、エスケープについて覚えておきたいと思います。
print "Hello\nworld"
このように、\n
をつけると改行してくれます
print """<html>
\t<body>
\t</body>
</html>"""
ダブルクォーテーション3つかシングルクォーテーション3つで囲って、改行しながら複数行の文字列を打つこともできます。
改行した個所に\n
の改行文字があるものとして処理されます。
では、文字列に扱える便利なメソッドを見ていきます。
s = "abcdefg"
print len(s) # 7
print s.find("c") # 2
このように、文字列には便利なものが複数あります。
len()
は、その文字列の長さを返します。find
はその文字が何番目にあるかを返すので、
0から始まり、2となります。
##文字列 <> 数値
文字列と数値を変えたい時が少々あったりします。
s = "123"
print s # "123"
print int(s) # 123
数値にするならint
文字列にするならstr
を使います。
##リスト
似たようなデータを一つの変数で管理するリストについて勉強しましょう
リストは、つまり配列です。
colors = ["red","blue","green"]
print colors[0] # "red"
このように色を管理するcolors
というものを作りました。
中身を取り出すにはcolors[x]
として、xには添字というものを入れてあげます。
配列の添字は1からではなく0からなので、colors[0]
とすると、先頭の"red"
を取得できます。
では、リストが扱える便利なメソッドを幾つか紹介したいと思います。
colors = ["red","blue","green"]
colors.reverse()
print colors # ["green","blue","red"]
colors.sort()
print colors # ["blue", "green", "red"]
このように、ソートや逆順などはメソッドを使って簡単にできました!
##タプル
タプルも配列ですが、リストとの大きな差は、後から変更できないという点です。
タプルは、定数の配列と思えばいいと思います。
定義の仕方ですが、
tp = ("kono","junya")
のように、()
で表現しますが、
(4/26追記)
本来タプルは、
tp = "kono","junya"
とも、記述できます。
これは、,
によって判別しているからです。
(end)
要素が1個のタプルは、優先演算の括弧と区別するために最後にカンマを指定します。
tp1 = ("kono",)
タプルは後から変更できないので、読み込みが少し高速になっていたりします。
では、どうしてもリストに変えたい時や、一時的にリストに変えたい時はどうすればいいのでしょうか。
その場合は
a = list(tp)
print a # ["kono","junya"]
list
というもので囲めばいいです。では、あ〜〜やっぱりタプルっすわぁ〜〜となった時にどうするか。
b = tuple(a)
print b # ("kono","junya")
リストにするならlist
、タプルならtuple
ただそれだけ。
##辞書
先ほどのリストに似ていますが、リストの構成上、値を取り出しにくい点がありました。
そこで、先人たちは名前をつけるべく辞書というものを作ってくれました。
まぁ連想配列です。
#sales = {key:value}
sales = {"junya":100,"kono":40}
このように定義します。
では、辞書で使える便利なメソッドについても勉強していきましょう。
print sales.keys() #['junya', 'kono']
print sales.values() #[100, 40]
print sales.items() #[('junya', 100), ('kono', 40)]
.keys()
で、その辞書の全部のkeyを取得してくれます。
.values()
で、全部の値を取得できます。
.items()
で、その辞書自体を取得できます。
##繰り返し処理
何回も処理を繰り返すためのループ文について、見ていきましょう。
よく使うのはfor文だと思います。
配列の要素分だけループしてくれます。
こんな感じ。
colors = ["red","blue","yellow"]
for color in colors:
print color
colorには、colorsから順番に要素が代入されていきます。
では、100回ループするのを作りたい時は、100個の要素の配列を書かないといけないんでしょうか。。
いいえ。そんなことはありません。
range
というものを使います。
これは、指定分の数字のリストを返してきてくれるものなんですが、いいように使ってやりましょう!
for i in range(100):
print i
これで、100ループ間違いなし!!!!
次に、辞書の中身をループさせたいと思います。
書き方はこんな感じ
user = {"kono":100,"junya":40}
for key,value in user.iteritems():
print key
for key in user.keys():
print key
user.iteritemsでは、その辞書の中身がそれぞれkeyとvalueに入っています。
user.keys()を使うとkeyだけの取得もできます。
##条件分岐
条件分岐は、ある特定の時にはこちらの処理など、分岐を与えるものです。
score = 60
if score < 40:
print "OUT!"
elif score < 65:
print "SOSO..."
else:
print "Good!"
このように書けます。
他にも、条件を幾つか組み合わせたい時があると思います。
そんな時は
if score > 10 and score < 20:
print "oh..."
のように、and
で組み合わせることができます。
C言語やJavaの演算子が && => and
,|| => or
,! => not
になると思ってください。
なお、pythonでは、
if 10 < score < 20:
print "oh..."
のように、書くこともできます!
また真偽のみならば、
score = 50
print "Good!" if score >= 60 else "NG!"
このように一行でスッキリ書くこともできます。
##関数
では、処理をひとまとめにしておける関数について、勉強していきたいと思います。
関数の定義は
def hello():
print "Hello"
hello() # Hello
def
というキーワードを使って、関数を定義することが可能です。
では、引数についても見ていきましょう
def hello(name):
print "hello %s"%name
hello("junya") #hello junya
%sなど見かけないものが出てきましたが、STRINGのsで、
%nameで指定したnameを%sに代入してくれます。
返り値についても見ていきましょう
def hello(name):
return "Hello %s"%name
print hello("junya") #Hello junya
簡単ですね。
関数の最後にmap
について勉強したいと思います。
mapとは、リストにその関数を当て込んでいくもので、
def double(x):
return x * x
print map(double,[2,5,8]) # [4, 25, 64]
このように便利に使えます。
この関数の部分ですが、この程度ならわざわざdoubleを作るのもめんどくさいので、
mapの中に書き込みたいと思います。
print map(lambda x:x*x,[2,5,8])
lambda
というキーワードを使い、xという名前をつけて、x*x
をリストに当てていきます。
では、最後にクラスについて見ていきたいと思います。
##クラス
クラス自体の説明としては、よく設計図などと言われたりします。
そのクラスを自作する時なんですが、
class User(object):
def __init__(self,name):
self.name = name
def hello(self):
print "hello %s"%self.name
ざっと書きました。
Userというclassを作り、括弧の中に親クラス(スーパークラス)を指定します。この例ではobjectクラスを親にしています。
コンストラクタは__init__
という名前でメソッドを作ればできます。
引数に自分自身を表すself
を入れて、self.name = name
のように初期化します。
helloというメソッドも作ったので、見ていきましょう。
インスタンスする時は
bob = User("bob")
print bob.name #bob
bob.hello() #hello bob
newなどはつけないことに注意してください!
あとはそのままですね。
#あとがき
今回はPythonの基礎の基礎の基礎を抑えてみました。
PHPの基礎の基礎の基礎も書いているので、良ければ見てちょ!
間違いなどのご指摘は、コメント欄でお願いします。
また、急な変更をしないといけない場合は、@konojunyaへよろしくお願いします!
次回はたぶんpythonを使ったTwitterAPIとかしてると思いますので、また見てください!
See you!