Edited at

Pythonの基礎の基礎の基礎

More than 3 years have passed since last update.


前書き

筆者は、Python初心者です。覚書程度に書いているので、ご了承ください。

間違いがあれば、コメント欄にてご指摘お願いします。


自己紹介

Twitter @konojunya

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の新2回生です👍 (2016.4.24現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう!

では、早速。


初めてのPython

順番に進めていきます!


環境

僕はMacなので、元からPythonは入っていましたが、インストールしなおしました。

Pythonには、2系。3系などありますが、僕はv2.7.11なので、2系の書き方になります。

少し3とは、違うようなので、記事のまま動かしたい場合は、Python 2.xをインストールしてください。

Pythonインストール(Mac編)

僕はこのhomebrewを使ったインストール方法でインストールしました。

windows環境へのpythonインストール

pythonの拡張子は、複数ありそれぞれ、意味がありますが今回は.pyだけで学習を進めたいと思います。

なお、一番最初にutf-8で書くぜ!と宣言しているほうがいいので、


index.py

# coding: UTF-8


#insert code...

Pythonはインストールすると、会話的に実行することも可能です。

コマンドラインで、pythonと打つと、そこに式などを書いてすぐに実行結果を試すことができます。

終えるときはexit()とすると、その状態から抜けることができます。


変数

pythonでは、変数を作ることができます。

C言語やJavaのような、intとかstringとか、

javascriptやPHPのように、varも$も必要ありません。


index.py

msg = "Hello World"

print msg # Hello World

このように変数を使うことができます。

printというのは、そのものをコンソール上に展開して表示してくれるものです。

ここで登場したのが、代入演算子です。

ここでは=が登場していますが、数学的なイコールではないことに注意してください。

プログラミングにおいて、=は、「変数名と値を紐付ける、対応付ける」というものです。

では、代入演算子はどのようなものがあるのでしょうか。


index.py

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に置き換えてください。

簡単な計算もしてみましょう。


index.py

plus = 5 + 3

print plus # 8

このようなときに使う足し算や、引き算などの演算子を、代数演算子と言います。

代数演算子は以下のようなものがあります。


index.py

+a            # 正数

-a # 負数
a + b # 加算
a - b # 減算
a * b # 乗算
a / b # 除算
a % b # a を b で割った余り
a ** b # a の b 乗
a // b # 切り捨て除算

その他に、ビット演算子などもあります。


index.py

~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 ビット右シフト

などですね。

では、少数を交えた計算をしてみましょう


index.py

plus = 5 + 3.0

print plus # 8.0

今回は同じ5+3なのに、答えが8.0です。

これは、3を3.0と表記することで、少数になるので、

答えもその少数に合わした形になります。

では、日本語をprintしてみましょう


index.py

useless = u"無駄だ。"

print useless # 無駄だ。

日本語を扱うときの注意点で、日本語を扱うときは先頭にuをつけてください。

unicodeのuなんですが、これがないと後々、文字列の長さなどを上手く測れなくなってくるので、絶対につけるようにしてください。


文字列

さて、もう既にわかる人にはわかりますが、文字列です。

"ダブルクォーテーション"'シングルクォーテーション'で囲みます。

代入は上記の通りなんですが、エスケープについて覚えておきたいと思います。


index.py

print "Hello\nworld"


このように、\nをつけると改行してくれます


index.py

print """<html>

\t<body>
\t</body>
</html>"""


ダブルクォーテーション3つかシングルクォーテーション3つで囲って、改行しながら複数行の文字列を打つこともできます。

改行した個所に\nの改行文字があるものとして処理されます。

では、文字列に扱える便利なメソッドを見ていきます。


index.py

s = "abcdefg"

print len(s) # 7
print s.find("c") # 2

このように、文字列には便利なものが複数あります。

len()は、その文字列の長さを返します。findはその文字が何番目にあるかを返すので、

0から始まり、2となります。


文字列 <> 数値

文字列と数値を変えたい時が少々あったりします。


index.py

s = "123"

print s # "123"
print int(s) # 123

数値にするならint文字列にするならstrを使います。


リスト

似たようなデータを一つの変数で管理するリストについて勉強しましょう

リストは、つまり配列です。


index.py

colors = ["red","blue","green"]

print colors[0] # "red"


このように色を管理するcolorsというものを作りました。

中身を取り出すにはcolors[x]として、xには添字というものを入れてあげます。

配列の添字は1からではなく0からなので、colors[0]とすると、先頭の"red"を取得できます。

では、リストが扱える便利なメソッドを幾つか紹介したいと思います。


index.py

colors = ["red","blue","green"]

colors.reverse()
print colors # ["green","blue","red"]

colors.sort()
print colors # ["blue", "green", "red"]


このように、ソートや逆順などはメソッドを使って簡単にできました!


タプル

タプルも配列ですが、リストとの大きな差は、後から変更できないという点です。

タプルは、定数の配列と思えばいいと思います。

定義の仕方ですが、


index.py

tp = ("kono","junya")


のように、()で表現しますが、

(4/26追記)

本来タプルは、


index.py

tp = "kono","junya"


とも、記述できます。

これは、,によって判別しているからです。

(end)

要素が1個のタプルは、優先演算の括弧と区別するために最後にカンマを指定します。


index.py

tp1 = ("kono",)


タプルは後から変更できないので、読み込みが少し高速になっていたりします。

では、どうしてもリストに変えたい時や、一時的にリストに変えたい時はどうすればいいのでしょうか。

その場合は


index.py

a = list(tp)

print a # ["kono","junya"]

listというもので囲めばいいです。では、あ〜〜やっぱりタプルっすわぁ〜〜となった時にどうするか。


index.py

b = tuple(a)

print b # ("kono","junya")

リストにするならlist、タプルならtupleただそれだけ。


辞書

先ほどのリストに似ていますが、リストの構成上、値を取り出しにくい点がありました。

そこで、先人たちは名前をつけるべく辞書というものを作ってくれました。

まぁ連想配列です。


index.py

#sales = {key:value}

sales = {"junya":100,"kono":40}

このように定義します。

では、辞書で使える便利なメソッドについても勉強していきましょう。


index.py

print sales.keys()     #['junya', 'kono']

print sales.values() #[100, 40]
print sales.items() #[('junya', 100), ('kono', 40)]

.keys()で、その辞書の全部のkeyを取得してくれます。

.values()で、全部の値を取得できます。

.items()で、その辞書自体を取得できます。


繰り返し処理

何回も処理を繰り返すためのループ文について、見ていきましょう。

よく使うのはfor文だと思います。

配列の要素分だけループしてくれます。

こんな感じ。


index.py

colors = ["red","blue","yellow"]

for color in colors:
print color


colorには、colorsから順番に要素が代入されていきます。

では、100回ループするのを作りたい時は、100個の要素の配列を書かないといけないんでしょうか。。

いいえ。そんなことはありません。

rangeというものを使います。

これは、指定分の数字のリストを返してきてくれるものなんですが、いいように使ってやりましょう!


index.py

for i in range(100):

print i

これで、100ループ間違いなし!!!!

次に、辞書の中身をループさせたいと思います。

書き方はこんな感じ


index.py

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だけの取得もできます。


条件分岐

条件分岐は、ある特定の時にはこちらの処理など、分岐を与えるものです。


index.py

score = 60

if score < 40:
print "OUT!"
elif score < 65:
print "SOSO..."
else:
print "Good!"


このように書けます。

他にも、条件を幾つか組み合わせたい時があると思います。

そんな時は


index.py

if score > 10 and score < 20:

print "oh..."

のように、andで組み合わせることができます。

C言語やJavaの演算子が && => and,|| => or,! => not

になると思ってください。

なお、pythonでは、


index.py

if 10 < score < 20:

print "oh..."

のように、書くこともできます!

また真偽のみならば、


index.py

score = 50

print "Good!" if score >= 60 else "NG!"


このように一行でスッキリ書くこともできます。


関数

では、処理をひとまとめにしておける関数について、勉強していきたいと思います。

関数の定義は


index.py

def hello():

print "Hello"

hello() # Hello


defというキーワードを使って、関数を定義することが可能です。

では、引数についても見ていきましょう


index.py

def hello(name):

print "hello %s"%name

hello("junya") #hello junya


%sなど見かけないものが出てきましたが、STRINGのsで、

%nameで指定したnameを%sに代入してくれます。

返り値についても見ていきましょう


index.py

def hello(name):

return "Hello %s"%name

print hello("junya") #Hello junya


簡単ですね。

関数の最後にmapについて勉強したいと思います。

mapとは、リストにその関数を当て込んでいくもので、


index.py

def double(x):

return x * x

print map(double,[2,5,8]) # [4, 25, 64]


このように便利に使えます。

この関数の部分ですが、この程度ならわざわざdoubleを作るのもめんどくさいので、

mapの中に書き込みたいと思います。


index.py

print map(lambda x:x*x,[2,5,8])


lambdaというキーワードを使い、xという名前をつけて、x*xをリストに当てていきます。

では、最後にクラスについて見ていきたいと思います。


クラス

クラス自体の説明としては、よく設計図などと言われたりします。

そのクラスを自作する時なんですが、


index.py

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というメソッドも作ったので、見ていきましょう。

インスタンスする時は


index.py

bob = User("bob")

print bob.name #bob
bob.hello() #hello bob

newなどはつけないことに注意してください!

あとはそのままですね。


あとがき

今回はPythonの基礎の基礎の基礎を抑えてみました。

PHPの基礎の基礎の基礎も書いているので、良ければ見てちょ!

間違いなどのご指摘は、コメント欄でお願いします。

また、急な変更をしないといけない場合は、@konojunyaへよろしくお願いします!

次回はたぶんpythonを使ったTwitterAPIとかしてると思いますので、また見てください!

See you!