はじめに
鈴木たかのりです。
本連載ではPythonエンジニア養成読本という書籍の読書会イベントについてレポートします。この書籍は
読書会では書籍と同様に、
筆者がこの読書会を始めようと思った動機としては、
読書会の進め方
第1回の読書会は5月21日
当日は以下のタイムテーブルで進めました。
- 19:00-19:10:参加者の自己紹介
- 19:10-19:40:
「第1章 よくわかるPythonの世界」 - 19:10-21:10:
「第2章 これだけは知っておきたいPython言語はじめの一歩」 - 21:10-22:00:ビアバッシュ
(ビールとピザでの参加者懇親会)
一般的な読書会では
この形式は私の発案ではなく、
![図1 読書会の様子 図1 読書会の様子](/assets/images/news/report/01/python-training-book-reading-club/0001/thumb/TH800_001.jpg)
自己紹介
最初に筆者も含めて参加者全体の自己紹介を行いました。全部で16名の方が参加してくださいました。
参加者の傾向としては
第1章 よくわかるPythonの世界
第1章は筆者の担当です。この章ではPythonのプログラミングについてはほとんど書いていませんが、
1-1 Pythonの特徴
この節ではプログラミング言語Pythonの特徴的なポイントについて解説しました。
そもそもPythonという名前なので、
![図2 Pythonロゴ 図2 Pythonロゴ](/assets/images/news/report/01/python-training-book-reading-club/0001/thumb/TH800_002.jpg)
また、
下記のサンプルコードのように、
for i in range(10):
if i % 5 == 0:
print 'ham'
elif i % 3 == 0:
print 'eggs'
else:
print 'spam'
また、import this
と入力すると表示されます。1行目は
>>> import this
The Zen of Python, Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
(以下略)
ちなみに、
1-2 その歴史とバージョン選定のポイント
この節ではPythonのリリースバージョンと、
現在アクティブなバージョンはPython 2系
Python 2系では日本語のencode/
ここで
$ brew install python python3 $ /usr/local/bin/python -V Python 2.7.9 $ /usr/local/bin/python3 -V Python 3.4.2
「現在Python 2系のコードがあり、
Python 2系のコードを3系に変換する2to3というがツールがありますが、
1-3 Pythonのコミュニティ
この節ではせっかくPythonを使うのであれば、
最初にPyCon
他にもPythonベースのツールやライブラリに関するコミュニティや、
第2章 これだけは知っておきたいPython言語はじめの一歩
第2章の執筆者の清原弘貴
![図3 清原弘貴氏とPythonエンジニア養成読本 図3 清原弘貴氏とPythonエンジニア養成読本](/assets/images/news/report/01/python-training-book-reading-club/0001/thumb/TH800_003.jpg)
普段、
2-1 Pythonをはじめよう
PythonにはPython チュートリアルという非常に優れたドキュメントがあります。ただ、
他の導入向け書籍についてはPythonスタートブックはプログラミングを知らない人も含めて導入にはとても良い本です。初めてのPythonも良い本ですが808ページと分厚いのでちょっと手に取りにくいと思います。
また自己紹介で
この節ではPythonのインストールから、
最終的には以下のようなコードが作成されます。
def fizzbuzz(num):
if num % 3 == 0 and num % 5 == 0:
return 'FizzBuzz'
elif num % 3 == 0:
return 'Fizz'
elif num % 5 == 0:
return 'Buzz'
else:
return str(num)
for num in range(1, 101):
print fizzbuzz(num)
その中で、
- 文字列:
'Fizz'
、'Buzz'
のように文字列が定義できること - 関数の定義:
def 関数名(引数):
と書いて関数が定義できること - 組み込み関数:連続した数字を返す
range()
関数と、文字列に変換する str()
関数について - for文:
for
による繰り返しのループについて - if文:
if
、elif
、else
による条件分岐について - 比較演算子:
==
比較演算子により値をチェックしていることについて %
演算子:剰余( %
)の演算子について
ここでrange(1, 101)
となっているのはなぜか?」range()
関数は引数が1つの場合は終了値を指定したことになり、range(1, 101)
としました。また、
>>> range(10) # 終了値に10を指定
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 10) # 開始値に1、終了値に10を指定
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11, 2) # 開始、終了値、ステップを指定
[1, 3, 5, 7, 9]
また、
2-2 Pythonのデータ型[基本編]
この節ではPythonの基本となる、
- 整数型
(int) - 浮動小数点型
(float) - 文字列型
(str) - Unicode文字列型
(unicode)
>>> 2 + 2 # 整数型の計算
4
>>> 3 - 8
-5
>>> 6 * 9
54
>>> 7 / 3 # 整数型同士の商は整数型となる
2
>>> 5.0 + 5.2 # 浮動小数点型の計算
10.2
>>> 10.2 + 8 # 浮動小数点型と整数型の計算結果は浮動小数点型になる
18.2
シングルクォート'
)"
)
>>> 'Hello,world'
'Hello,world'
>>> "Hello,world"
'Hello,world'
>>> 'python'[1] # 文字列のインデックス指定
'y'
>>> 'python'[2:5] # 文字列のスライス指定(2文字目から5文字目の前まで)
'tho'
>>> 'python'[:3] # 最初から3文字目の前まで
'pyt'
>>> 'python'[4:] # 4文字目から最後まで
'on'
>>> 'python'[1:-1] # 1文字目から後ろから1文字目の前まで
'ytho'
インデックスやスライスで指定する数値は以下の図のようになっており、
![図4 インデックス 図4 インデックス](/assets/images/news/report/01/python-training-book-reading-club/0001/thumb/TH800_004.jpg)
Python 2系ではUnicode文字列を扱うためのunicode型があります。Python 3系ではstr型u'文字列'
と宣言します。また、
>>> u'日本'
u'\u65e5\u672c'
>>> print u"日本" # printに渡すと文字列が表示される
日本
>>> u"日本".encode('utf-8') # str型にエンコード
'\xe6\x97\xa5\xe6\x9c\xac'
>>> '\xe6\x97\xa5\xe6\x9c\xac'.decode('utf-8') # unicode型にデコード
u'\u65e5\u672c'
>>> print '\xe6\x97\xa5\xe6\x9c\xac'.decode('utf-8')
日本
なお、b''
の部分)になります。
>>> u"日本".encode('utf-8')
b'\xe6\x97\xa5\xe6\x9c\xac'
>>> b'\xe6\x97\xa5\xe6\x9c\xac'.decode('utf-8')
'日本'
ここで
# 引数はint型、戻り値はstr型
def fizzbuzz(num: int) -> str:
2-3 Pythonのデータ型[コレクション編]
この節では複数のデータをまとめて扱う
- リスト
(list) - タプル
(tuple) - 辞書
(dict) - 集合
(set)
リストとタプルはどちらも複数のデータをまとめるコレクションです。リストは可変なのに対して、
>>> ['spam', 'egg', 0.5] # リストは[]で囲む
['spam', 'egg', 0.5]
>>> ('spam', 'ham', 4) # タプルは()で囲む
('spam', 'ham', 4)
>>> animals = ['cat', 'dog', 'snake']
>>> animals.append('elephant') # append()メソッドで要素を追加
>>> animals
['cat', 'dog', 'snake', 'elephant']
リストは通常[]
で囲んで定義しますが、animals
リストの各文字列の長さをlen()
関数で取得したリストを作成するとします。for文でリストを作成する方法と、
>>> ret = [] # 空のリストを作成
>>> for animal in animals: # animalsから一つずつ要素を取り出す
... ret.append(len(animal)) # 文字列の長さを取得し、retに追加
...
>>> ret
[3, 3, 5, 8]
>>> [len(animal) for animal in animals] # リスト内包表記で記述
[3, 3, 5, 8]
このようにリスト内包表記を使用すると、
辞書
>>> user_info = { # 辞書は{}で囲む
... 'user_name': 'hirokiky', # key: valueの形式で要素を指定
... 'last_name': 'Kiyohara',
... }
>>> user_info
{'last_name': 'Kiyohara', 'user_name': 'hirokiky'}
>>> user_info['user_name'] # 任意のkeyの値を取り出す
'hirokiky'
>>> {'spam', 'ham'} # 集合も{}で囲む(要素はカンマ区切り)
set(['ham', 'spam'])
>>> {'spam', 'spam', 'spam', 'ham'} # 同じ値は1つしか持てない
set(['ham', 'spam'])
「大量のデータを扱う場合はどうしたら良いか?」
2-4 ファイル操作とモジュール
ファイル操作とモジュールについては簡単に、
>>> with open('todo.txt') as f: # ファイルを読み込みモードで開く
... todo_str = f.read() # ファイルの中身を読み込む
...
>>> with open('memo.txt', 'w') as f: # ファイルを書き込みモードで開く
... f.write('Hello Python!') # ファイルに文字列を書き込む
...
モジュールは別のファイルに記述した関数を利用する方法です。以下の様なadd()
関数が定義されたcalc.
def add(a, b):
return a + b
同じディレクトリでPythonインタープリタを実行し、add()
関数が利用できます。このようにして機能毎にファイルが分割できます。
>>> import calc # calc.py をインポート
>>> calc.add(1, 2) # add() 関数を実行
3
また、
「importでのモジュール読み込みをファイルの先頭ではなく、
また
ビアバッシュ(懇親会)
読書会の終了後、
![図5 ビアバッシュ!! 図5 ビアバッシュ!!](/assets/images/news/report/01/python-training-book-reading-club/0001/thumb/TH800_005.jpg)
ビアバッシュの中ではPythonでどんなことをやっているか、
また、
- connpassのカテゴリ
「Python」 のグループ - connpass
(イベントサイト) で開催されているPythonに関連するイベントが一覧できます
- connpass
- PyCon JP BlogのPython関連イベント
- 月に1回、
国内のPython関連イベントについてまとめています (実は筆者が書いています)
- 月に1回、
また、
ネタとして
まとめ
こんな感じで1回目の読書会は無事に終了しました。
次回は6月18日
本を読んでみて疑問がある方、
では、