「Python言語」はじめの一歩 / First step of Python

  • View
    26.929

  • Download
    5

  • Category

    Software

Preview:

Citation preview

「Python言語」

はじめの一歩Takanori Suzuki / 2015-08-19

ヒカ☆ラボ

ハッシュタグは #ヒカラボ

自己紹介

• 鈴木 たかのり / Takanori Suzuki

• Twitter: @takanory

PyCon JP 2015 Chair

Python Bouldering部 部長

• Pythonで開発してる会社

• 一部分を書いた→

• 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エンジニア養成読本

来場ありがとうございます

Pythonでのプログラミングに

興味ある人?

Python 書いたことある人?

他の言語でプログラム 書いたことある人?

プログラム 書いたことない人?

注意事項

今日の内容だけで Python書けるように

ならないよ

今日やること1. Pythonの特徴

2. 言語の特徴

3. インストール

4. 基本的な言語仕様

5. Python 2と3の違い

6. よく使う標準ライブラリ

7. よく使うサードパーティ製パッケージ

8. どうやって学ぶか

1. Pythonの特徴

Q. Pythonってなにができるの?

A. なんでもできます

きれいに書きやすい ので保守しやすい

ちゃんとしてる

• 20年以上開発が継続

• 後方互換性あり

• PEPというルールに則って機能を拡張

Python 2 と 3

• 最新は Python 2.7.10 と 3.4.3(もうすぐ3.5.0)

• 一部後方互換性なし

• 今日は Python 3 ベースでやります

2. 言語の特徴

今日やること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

バッテリー付属

• 200+ の便利な標準ライブラリ

• http://docs.python.jp/3/library/

豊富な外部パッケージ

• 60,000+ の外部パッケージ

• PyPI: Python Package Index

• http://pypi.python.org/

• 「パイピーアイ」と読むらしい

3. インストール

python.orgからdownload

• Mac, Windowsはインストーラーからどうぞ

• https://www.python.org/downloads/

• WindowsはPATHの設定をお忘れなく

• Linux はそれぞれのパッケージ管理からどうぞ

4. 基本的な言語仕様

今日やること1. Pythonの特徴

2. 言語の特徴

3. インストール

4. 基本的な言語仕様 ← イマココ

5. Python 2と3の違い

6. よく使う標準ライブラリ

7. よく使うサードパーティ製パッケージ

8. どうやって学ぶか

対話モードで数値計算$ python >>> 1 + 1 2 >>> 2 * 3 6 >>> width = 60 >>> height = 90 >>> width * height 5400

文字列とリスト

>>> ‘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」と言う

• 5で割り切れる時は「Buzz」と言う

• 3と5で割り切れる時は「FizzBuzz」と言う

Pythonファイルを実行def fizzbuzz(num): return num

print(fizzbuzz(4))

$ python fizzbuzz.py 4

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)

FizzBuzzの完成$ python fizzbuzz.py 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz : Buzz

その他の言語仕様• データ型

• 文字列の操作

• コレクション

• ファイル操作

• モジュール

データ型

• int: 整数型

• float: 浮動小数点型

• str: 文字列型

• bytes: バイト型

データ型>>> 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: リスト

• tuple: タプル

• dict: 辞書

• set: 集合

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

5. Python 2 と 3 の違い

今日やること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の整数の割り算の結果は整数

Python 3は浮動小数点数

>>> 4 / 2 2 >>> 1 / 3 0

>>> 4 / 2 2.0 >>> 1 / 3 0.3333333333333333

標準ライブラリの再構成• 名前が変更

• ConfigParser -> configparser

• 統合

• StringIO, cStringIO -> io

• 再構成

• urllib, urllib2, urlparse -> urllib.*

6. よく使う

標準ライブラリ

今日やること1. Pythonの特徴

2. 言語の特徴

3. インストール

4. 基本的な言語仕様

5. Python 2と3の違い

6. よく使う標準ライブラリ← イマココ

7. よく使うサードパーティ製パッケージ

8. どうやって学ぶか

200+ の標準ライブラリ

http://docs.python.jp/3/library/

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: 日付と時刻>>> import datetime >>> now = datetime.datetime.now() >>> now.isoformat() '2015-08-17T18:17:49.623626' >>> today = datetime.date(2015, 8, 18) >>> nextyear = datetime.date(2016, 1, 1) >>> delta = nextyear - today >>> delta.days 136

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'}

7. よく使う

サードパーティ製 パッケージ

今日やること1. Pythonの特徴

2. 言語の特徴

3. インストール

4. 基本的な言語仕様

5. Python 2と3の違い

6. よく使う標準ライブラリ

7. よく使うサードパーティ製パッケージ← イマココ

8. どうやって学ぶか

60,000+ の

サードパーティ製 パッケージ

https://pypi.python.org/pypi

pipとvirtualenv

• pip: サードパーティ製パッケージをインストールするためのコマンド

• virtualenv: 独立したPython環境を作る

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 (venv)$ pip install requests (venv)$ python >>> import requests >>> quit() (venv)$ deactivate $ 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/

PyData関連• NumPy: 行列計算

• SciPy: 化学計算

• Pandas: データ操作と処理

• matplotlib: データ可視化

• Chiner: 深層学習

その他

• Sphinx: ドキュメント作成

• Ansible: システム構成管理

• pytz: タイムゾーン情報

• paramiko: SSH2接続

8. どうやって学ぶか

Pythonエンジニア養成読本

• これを買って復習しよう

PyCon JP 2015

• https://pycon.jp/2015/ja/

• 10月9日(金): チュートリアル

• 10月10日(土)、11日(日): カンファレンス

• 10月12日(月・祝): 開発スプリント

Web上のテキスト• Pythonチュートリアル

• http://docs.python.jp/3.4/tutorial/

• Dive into Python 3 日本語版

• http://diveintopython3-ja.rdy.jp/

• Python HOWTO

• http://docs.python.jp/3.4/howto/

まとめ

まとめ

• 復習しよう

• コードを書こう

• コミュニティに飛び込もう

Happy Hacking !

Recommended