乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

Python入門

Pythonで標準的に使われる
組み込み関数の一覧です

pythonの公式ドキュメントも参考にしてください

組み込み関数

abs()dict()help()min()setattr()
all()dir()hex()next()slice()
any()divmod()id()object()sorted()
ascii()enumerate()input()oct()staticmethod()
bin()eval()int()open()str()
bool()exec()isinstance()ord()sum()
bytearray()filter()issubclass()pow()super()
bytes()float()iter()print()tuple()
callable()format()len()property()type()
chr()frozenset()list()range()vars()
classmethod()getattr()locals()repr()zip()
compile()globals()map()reversed()__import__()
complex()hasattr()max()round() 
delattr()hash()memoryview()set() 

abs()
数の絶対値を返す
引数は整数または浮動小数点
abs(-5.23)
5.23

all()
iterable全ての要素が有ればTrueを返す
all([1,2,3])
True

any()
要素いずれかが有ればTrueを返す
any([None,None,1])
True






Pythonでは標準ライブラリの他に
いろいろなライブラリを読み込むことができます

anacondaでインストールしていれば
numpyやpandasなど
よく使われるライブラリをすぐに
読み込むことができます

読み込み方は

import モジュール名 as 別名

from モジュール名 import クラス名 as 別名

となります

as 別名は無くても良いですが
別名がないとライブラリにアクセスするのに
何度もライブラリ名を記述しないといけないため
長いライブラリ名を何度も書くことになります

別名を付けておくと記述が楽になります

特によく使われるライブラリは
略称がよく使われます

numpy np
pandas pd


早速読み込んでみましょう
今日の日付を判定してみます
from datetime import date
print date.today()
2017-01-16

小数点を切り上げ
import math
print (math.ceil(5.2332))
6

0.0~1.0までのfloatのランダム値を生成
import random
for i in range (5):
  print (random.random())

インストールされたパッケージの一覧を
見てみるには以下を実行してみることができます
import pkgutil
for m in pkgutil.iter_modules():
    print (m)
(FileFinder('//anaconda/lib/python3.5'), '__future__', False)
(FileFinder('//anaconda/lib/python3.5'), '_bootlocale', False)
(FileFinder('//anaconda/lib/python3.5'), '_collections_abc', False)・・・以下略

anacondaを使うとかなりの数がインストールされています

標準ライブラリや
その他のライブラリについては
おいおい紹介してゆきます

自作ライブラリの読み込み方

外部ライブラリでなく
自分で作ったものを読み込みこみたい場合は

まず自作のライブラリを用意します
pythonのpyファイルとして作成し

balss.py
def balss(val):
    print ('バルス!!' * val)

これをjupyter notebook のrootディレクトリに保存します
macの場合はデフォルト設定だと /Users/ユーザー名

jupyter上でどこに今いるかが分からない場合は
!pwd
と打って確認してみましょう

使う場合は「.py」を抜いたパッケージ名前でimportします
import balss
balss.balss(5)
バルス!!バルス!!バルス!!バルス!!バルス!!

これでよく使う処理などを
別ファイルに書き出しておけば
いつでも呼び出すことができます

再利用したい場合に使いましょう

自分で作った関数を定義して使うこともできます

基本構文は

def 関数名(引数): 
処理

引数に使う変数は無くても問題なし
関数名には英大小文字とアンダースコアが使えます

それでは作ってみましょう
引数指定した数値までの
フィボナッチ数を出力する関数を作ります
def fib(n): 
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()
これを実行するには関数名(引数)とします
fib(100)
0 1 1 2 3 5 8 13 21 34 55 89 

引数を変えることで結果を変えることができます
ただしこれでは必ずprintされてしまうので
使い勝手が悪いです

結果を変数にするためには return を使って
戻り値を返すようにします
def fib_b(n): 
    a, b = 0, 1
    result = []
    while a < n:
        result.append(a)
        a, b = b, a+b
    return result

print(fib_b(20))
[0, 1, 1, 2, 3, 5, 8, 13]


これで関数の結果がリストになって返ってきます
通常は処理をまとめるために使うものなので
戻り値を返すようにするのが良いでしょう

ラムダ式

pythonのコードの中で
関数名をつけずに変数として関数を記述できます
書き方は

変数名 = lambda 変数名 : 返り値

少しややこしいですが
これで処理を簡潔に書くこともできます
f = lambda a, b : a + b
print(f(3,5))
8

こうした場合、変数名として一度定義しているので
同じ処理として繰り返し使うことができます



Pythonではリストの中で
様々な処理を内包することができます

元のリストを2倍する様な処理を考えた場合 
(1から5までの数値を倍にしてリストに追加) 
dataList = [1,2,3,4,5]
newData = []
for d in dataList:
  newData.append(d * 2)
print(newData)
[2, 4, 6, 8, 10]

for文ではこのようになりますが
リスト内包表記で記述するともっと簡潔にできます 
dataList = [1,2,3,4,5]
newData = [d * 2 for d in dataList]
print(newData)
[2, 4, 6, 8, 10]


リスト作成の条件にfor文を使って
リストを作成し、結果は同じでも記述が楽です

さらにif文も追加します
(1から10までの偶数を
2倍の数値にしてリストに追加する)
dataList = range(1,11)
newData = []
for d in dataList:
    if d % 2 == 0:
        newData.append(d * 2)
print(newData)
[4, 8, 12, 16, 20]

この様な条件も次のようになります
dataList = range(1,11)
newData = [d * 2 for d in dataList if d % 2 == 0]
print(newData)
[4, 8, 12, 16, 20]


ちなみに似た様な書き方でラムダ式というのがありますが
今回は割愛し後述します

前回の九九も
リスト内表記で簡潔に記述することができます
print ('\n'.join([''.join(['%3d'%(i*j) for i in range(1,10)]) for j in range(1,10)]))
  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81

(windowsの場合は \ を ¥ に変えてください)
二重for文の結果(i * j)をjoinで連結し
\n をjoinして改行しています
最初のループが終わった時に改行されるようにしている所に
注意しましょう

ちなみにリスト内包表記は
速度面でも有利なようです
下記は1万回ループ処理をした結果を測ったものです
%%timeit
e_1 = []
for i in range(10000):
    e_1.append(i)
1000 loops, best of 3: 881 µs per loop

%%timeit
e_1= [i for i in range(10000)]
1000 loops, best of 3: 367 µs per loop

%%timeit は速度を測れます
リスト内包表記は速度面でも有利なため
覚えておくと便利です


while文と同じ様に
Pythonでは他の言語と同じく
繰り返し処理を行う文としてfor文が
備わっています

基本的な構文は

for 変数 in オブジェクト:
  実行する処理

このようになります

実行する処理の部分はインデントで
字下げを行うことが必要になります

whileとの違いは
何回処理をするかがあらかじめ決まっていることです
オブジェクトの個数分だけ処理が行われます

オブジェクトにはリストやrange関数が良く用いられます
for v in range(5):
    print(v)
0
1
2
3
4

この場合range関数の結果は0から5の手前までになるので
変数vには0から4までが格納されることになります

if分と組み合わせると
for v in range(1,41):
    if v%3 == 0 or '3' in str(v):
        print(v)
3
6
9
12
13
15
18
21
23
24
27
30
31
32
33
34
35
36
37
38
39

昔流行った「3の倍数と3が含まれる数」
の場合に処理をする際にはこうなります
1から40まで処理を行うのでrangeの引数は(1,41)となります

リストを回数部分に指定できます
friendList = ['チョッパー','ゾロ','ナミ','ウソップ','サンジ']
for friend in friendList[2:4]:
    print(friend)
ナミ
ウソップ

リストの全てを条件にするのでなく
スライスで区切ればその中の一部だけを取り出して
繰り返し処理を行うこともできます

リストの1番目を取り出す場合の指定がlist[0]になるため
この場合はリストの3番目から5番目の手前までが
繰り返しの対象になっています


制御文の使い方


for文の処理内で制御することもできます
その際に使われるのが
・else
・break
・continue
です

まずelse文の処理はwhile文と同じく
for文の処理が終わった後に1度だけ実行されます
breakでfor文の処理を抜けた場合は実行されません

continueは処理を途中で飛ばし
ループの最初に戻ります
friendList = ['チョッパー','ゾロ','ナミ','ウソップ','サンジ']
_num = len(friendList)
for i in range(_num):
    if i%2==0:
        print(friendList[i])
    else:
        continue
        print(friendList[i])
else:
        print('終わり')
チョッパー
ナミ
サンジ
終わり

この場合途中の処理は飛ばされていますが
最後にelse文の処理は実行されます

for文の中にfor文を入れ子(ネスト構造)にすることもできます
for i in range(1,6):
    for h in range(1,6):
            print(str(i * h) + '\t', end="")
    print('\n')
1	2	3	4	5	

2	4	6	8	10	

3	6	9	12	15	

4	8	12	16	20	

5	10	15	20	25	

九九計算も簡単にでき、rangeの数値を増やせば
結果も増やせます

出力に関して
「\n」(windowsでは¥n)は改行
「\t」(windowsでは¥t)はタブ区切り
になります

 

このページのトップヘ