Upload
takanori-suzuki
View
1.851
Download
0
Embed Size (px)
Citation preview
自己紹介• 鈴木 たかのり / Takanori Suzuki
• Twitter: @takanory
• PyCon JP 2014-2016 Chair
• Python Bouldering 部(#kabepy)部長
• Python mini Hack-a-thon(#pyhack)主催
• Pythonで開発してる会社
• connpassも運営してるよ
• 一部分を書いた→
• http://www.shuwasystem.co.jp/products/7980html/4315.html
BeProud所属
• 2015年4月発売
• 内容はここから主に引用
• 128ページ、1,980円+税
• http://gihyo.jp/book/2015/978-4-7741-7320-7
Pythonエンジニア養成読本
今日やること1. Pythonの特徴
2. 言語の特徴
3. インストール
4. 基本的な言語仕様
5. Python 2と3の違い
6. よく使う標準ライブラリ
7. よく使うサードパーティ製パッケージ
8. どうやって学ぶか
今日やること1. Pythonの特徴
2. 言語の特徴 ← イマココ
3. インストール
4. 基本的な言語仕様
5. Python 2と3の違い
6. よく使う標準ライブラリ
7. よく使うサードパーティ製パッケージ
8. どうやって学ぶか
インデントでブロック構造
for i in range(10): if i % 5 == 0: print('ham') elif i % 3 == 0: print('eggs') else: print('spam')
対話モード$ python Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> for i in range(10): ... if i % 5 == 0: ... print('ham') ... elif i % 3 == 0: ... print('eggs') ... else: ... print('spam') ... ham spam spam : eggs
豊富な外部パッケージ
• 70,000+ の外部パッケージ
• PyPI: Python Package Index
• http://pypi.python.org/
• 「パイピーアイ」と読むらしい
python.orgからdownload
• Mac, Windowsはインストーラーからどうぞ
• https://www.python.org/downloads/
• WindowsはPATHの設定をお忘れなく
• Linux はそれぞれのパッケージ管理からどうぞ
今日やること1. Pythonの特徴
2. 言語の特徴
3. インストール
4. 基本的な言語仕様 ← イマココ
5. Python 2と3の違い
6. よく使う標準ライブラリ
7. よく使うサードパーティ製パッケージ
8. どうやって学ぶか
文字列とリスト
>>> ‘Hello world' ‘Hello world' >>> "Monty Python's Flying Circus" "Monty Python's Flying Circus" >>> ['Hello', 3] ['Hello', 3]
関数と組み込み関数
>>> def add(a, b): ... return a + b ... >>> add(1, 3) 4 >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
FizzBuzzで知る言語仕様
• 1から順番に数字を言う
• 3で割り切れる時は「Fizz」と言う(3, 6, 9, …)
• 5で割り切れる時は「Buzz」と言う(5, 10,…)
• 3と5で割り切れる時は「FizzBuzz」と言う(15, 30,…)
for: ループ処理def fizzbuzz(num): return num
for num in range(1, 101): print(fizzbuzz(num))
$ python fizzbuzz.py 1 2 3 : 100
if, elif, else: 条件分岐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)
データ型>>> type(1) <class 'int'> >>> type(1.1) <class 'float'> >>> type('日本語') <class 'str'> >>> '日本語'.encode('utf-8') b'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e' >>> type('日本語'.encode('utf-8')) <class 'bytes'>
文字列の操作>>> 'Hello World' # シングルクォーテーション 'Hello World' >>> "Hello World" # ダブルクォーテーション 'Hello World' >>> 'Mt.' + 'Fuji' # 文字列の連結 'Mt.Fuji' >>> 'python'[2:5] # スライス 'tho' >>> 't' in 'python' # 文字列の存在チェック True >>> 'pain-au-chocolat'.split('-') # 文字列分割 ['pain', 'au', 'chocolat']
list: リスト>>> animals = ['cat', 'dog', 'snake'] >>> type(animals) <class 'list'> >>> animals[0] # 要素を取得 'cat' >>> animals[1:] # スライスも使える ['dog', 'snake'] >>> animals.append('elephant') # 要素を追加 >>> for animal in animals: # ループで取り出す ... print(animal) ... cat dog snake elephant
tuple: タプル>>> animals = ('cat', 'dog', 'snake') >>> type(animals) <class 'tuple'> >>> animals[0] # 要素を取得 'cat' >>> animals[1:] # スライスも使える ('dog', 'snake') >>> animals.append('elephant') # 追加はエラー Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append' >>> 'spam', # 要素が一つのtupleを作成 ('spam',)
dict: 辞書>>> user_info = { ... 'firstname': 'takanori', ... 'lastname': 'suzuki', ... } >>> user_info {'firstname': 'takanori', 'lastname': 'suzuki'} >>> user_info['firstname'] # 要素を取得 'takanori' >>> 'firstname' in user_info # キーの存在チェック True >>> for key, value in user_info.items(): ... print(key, value) ... firstname takanori lastname suzuki
set: 集合>>> {'spam', 'ham'} {'ham', 'spam'} >>> {'spam', 'spam', 'spam'} {'spam'} >>> set1 = {'spam', 'ham'} >>> set2 = {'ham', 'eggs'} >>> set1 & set2 # 集合の積 {'ham'} >>> set1 | set2 # 集合の和 {'ham', 'eggs', 'spam'}
ファイル操作>>> with open('todo.txt') as f: # ファイルを開く ... todo_str = f.read() ... >>> with open('memo.txt', 'w') as f: # 書き込む ... f.write('Hello world\n') ... 12 >>> with open('memo.txt', 'a', encoding='utf-8') as f: # 文字コード指定して追記 ... f.write('こんにちは世界\n') ... 8
モジュールdef add(a, b): return a + b def sub(a, b): return a - b
>>> import calc >>> calc.add(1, 3) 4 >>> from calc import sub >>> sub(5, 2) 3
calc.py
今日やること1. Pythonの特徴
2. 言語の特徴
3. インストール
4. 基本的な言語仕様
5. Python 2と3の違い ← イマココ
6. よく使う標準ライブラリ
7. よく使うサードパーティ製パッケージ
8. どうやって学ぶか
printが文から関数に
>>> print # 空行を出力
>>> print 'Hello Python 2!' Hello Python 2!
Python 2のprint文
Python 3のprint関数>>> print() # 空行を出力
>>> print('Hello Python 3!') Hello Python 3!
文字列がUnicodeに統一Python 2の2種類の文字列
Python 3の文字列は1種類
>>> type('str文字列') <type 'str'> >>> type(u'unicode文字列') <type 'unicode'>
>>> type('str文字列') <class 'str'> >>> type(u'unicode文字列') <class 'str'>
整数の割り算が実数Python 2の整数の割り算の結果は整数(int)
Python 3は浮動小数点数(float)
>>> 4 / 2 2 >>> 1 / 3 0
>>> 4 / 2 2.0 >>> 1 / 3 0.3333333333333333
標準ライブラリの再構成• 名前が変更
• ConfigParser -> configparser
• 統合
• StringIO, cStringIO -> io
• 再構成
• urllib, urllib2, urlparse -> urllib.*
今日やること1. Pythonの特徴
2. 言語の特徴
3. インストール
4. 基本的な言語仕様
5. Python 2と3の違い
6. よく使う標準ライブラリ← イマココ
7. よく使うサードパーティ製パッケージ
8. どうやって学ぶか
re: 正規表現>>> import re >>> m = re.search('py(thon)', 'python') >>> m <_sre.SRE_Match object; span=(0, 6), match='python'> >>> m.group() 'python' >>> m.group(0) 'python' >>> m.group(1) 'thon'
sys, os: システムパラメータとOS
>>> import os >>> os.mkdir('spam') >>> os.chdir('spam') >>> os.getcwd() # 現在のディレクトリ '/Users/takanori/hikalab/spam' >>> import sys >>> sys.exit(1)
datetime: 日付と時刻>>> from datetime import datetime, date >>> now = datetime.now() >>> now.isoformat() '2016-01-08T19:31:49.991178' >>> today = date(2016, 1, 12) >>> nextyear = date(2017, 1, 1) >>> delta = nextyear - today >>> delta.days 355
math, random: 数学関数と乱数>>> import math >>> math.pi 3.141592653589793 >>> math.sqrt(2) 1.4142135623730951 >>> import random >>> random.randint(1, 1000) 632 >>> data = ['spam', 'ham', 'eggs'] >>> random.choice(data) 'eggs' >>> random.shuffle(data) >>> data ['spam', 'eggs', 'ham']
itertools: イテレータ生成関数
>>> import itertools >>> list(itertools.chain('ABC', 'DEF')) ['A', 'B', 'C', 'D', 'E', 'F'] >>> list(itertools.combinations('ABCD', 2)) [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
shutil: 高レベルなファイル操作
>>> import shutil >>> shutil.copytree('src_dir', 'dst_dir') >>> shutil.rmtree('src_dir')
json: JSONエンコーダ、デコーダ
>>> import json >>> data = {'spam': 'SPAM', ... 'ham': True, ... 'eggs': None, ... } >>> json_str = json.dumps(data) >>> json_str '{"eggs": null, "ham": true, "spam": "SPAM"}' >>> json.loads(json_str) {'ham': True, 'eggs': None, 'spam': 'SPAM'}
今日やること1. Pythonの特徴
2. 言語の特徴
3. インストール
4. 基本的な言語仕様
5. Python 2と3の違い
6. よく使う標準ライブラリ
7. よく使うサードパーティ製パッケージ← イマココ
8. どうやって学ぶか
pip のインストール
$ wget https://bootstrap.pypa.io/get-pip.py $ python get-pip.py $ pip install (package name)
virtualenv のインストール$ pip install virtualenv $ virtualenv venv $ . venv/bin/activate # enter virtualenv (venv)$ which python /Users/takanori/venv/bin/python (venv)$ pip install requests (venv)$ python >>> import requests >>> quit() (venv)$ deactivate # leave virtualenv $ python >>> import requests Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'requests'
dateutil: 日時操作の強力な拡張$ pip install python-dateutil
>>> from dateutil.parser import parse >>> parse("Mon Jan 26 20:34:20 UTC 2015") datetime.datetime(2015, 1, 26, 20, 34, 20, tzinfo=tzutc()) >>> parse("2015-01-26 20:34:20 JST") datetime.datetime(2015, 1, 26, 20, 34, 20, tzinfo=tzlocal()) >>> parse("Jan-26-2015") datetime.datetime(2015, 1, 26, 0, 0)
Requests: HTTPクライアント$ pip install requests
>>> import requests >>> url = 'http://connpass.com/api/v1/event/?keyword=python' >>> r = requests.get(url) # URLにアクセス >>> print(r.status_code) # ステータスコードを取得 200 >>> for event in r.json()['events'][:3]: # 先頭3件を取得 ... print(event['title']) # イベントのタイトルを取得 ... Python mini hack-a-thon 夏山合宿 2015 SoftLayer Bluemix Summit 2015 コミュニティ運営の秘訣を知りたい人、『Sync Meetup』に集まれ!!
BeautifulSoup4: HTML, XMLパーサ$ pip install beautifulsoup4
>>> from bs4 import BeautifulSoup >>> import requests >>> r = requests.get('http://docs.python.jp/3/library/') >>> soup = BeautifulSoup(r.content, "html.parser") # HTMLパース >>> toctree = soup.find('div', 'toctree-wrapper') # 目次を取得 >>> links = toctree.find_all('a') # aタグを全て取得 >>> len(links) # リンクの数を取得 358 >>> for link in links[:3]: # 先頭3件を取得 ... print(link.text) ... 1. はじめに 2. 組み込み関数 3. 組み込み定数
Pillow: 画像処理ライブラリ$ pip install pillow
>>> from PIL import Image >>> image = Image.open('sample.jpg') # 画像を読み込み >>> half = (image.size[0] / 2, image.size[1] / 2) >>> half = image.resize(half, Image.ANTIALIAS) # 縮小 >>> half.save('sample-half.jpg') # 画像を保存 >>> rotate = image.transpose(Image.ROTATE_90) # 回転 >>> rotate.save('sample-rotate.png') # PNGで保存
コーディング規約• PEP 0008 -- Style Guide for Python Code
• https://www.python.org/dev/peps/pep-0008/
• pep8: コーディング規約のチェック
• autopep8: 自動的にPEP8形式にする
• flake8: pep8 + ソースコードのチェック
Webフレームワーク
• Django: https://www.djangoproject.com/
• Pyramid: http://docs.pylonsproject.org/en/latest/docs/pyramid.html
• Flask: http://flask.pocoo.org/
• Bottle: http://bottlepy.org/
• 2015年10月発売
• 定番、便利なライブラリを厳選
• 320ページ、2,880円+税
• http://gihyo.jp/book/2015/978-4-7741-7707-6
Pythonライブラリ厳選レシピ
Web上のテキスト• Pythonチュートリアル
• http://docs.python.jp/3/tutorial/
• Dive into Python 3 日本語版
• http://diveintopython3-ja.rdy.jp/
• Python HOWTO
• http://docs.python.jp/3/howto/
PyCon JP 2016
• http://www.pycon.jp/
• Tokyo, Japan
• 秋くらい?
• スタッフも募集しています
• http://pyconjp.blogspot.jp/2015/11/pyconjp2016-staff-entry-open.html
入門者向け• Python入門者の集い
• http://python-nyumon.connpass.com/
• 次回は1月27日(水)
• Start Python Club
• http://startpython.connpass.com/
• 次回は2月8日(月)
女性向け
• PyLadies Tokyo
• http://pyladies-tokyo.connpass.com/
• 定期的にMeetupイベントを実施
• 次回は1月16日(土)
もくもく系• Python mini Hack-a-thon
• http://pyhack.connpass.com/
• だいたい毎月開催
• 1月22日(金)-24日(日)は雪山合宿
• Pythonもくもく会
• http://mokupy.connpass.com/
コミュニティ・イベント情報• connpassのPythonカテゴリ
• http://connpass.com/category/Python/
• PyCon JP Blogのイベント情報
• http://pyconjp.blogspot.jp/search/label/event
• Python Calendar Japan
• https://goo.gl/0UfW1Y
Python 3.5の新機能• What’s New In Python 3.5
• http://docs.python.jp/3/whatsnew/3.5.html
• PEP 484 - Type Hints
• https://www.python.org/dev/peps/pep-0484/
def greeting(name: str) -> str: return 'Hello ' + name