Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

53,227 views

Published on

プログラミング言語Pythonの特徴、言語仕様、Python 2と3の違い、よく使うライブラリ、パッケージ、今後の学び方などについての発表資料です

Published in: Software
  • Be the first to comment

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

  1. 1. 「Python言語」 はじめの一歩 Takanori Suzuki / 2015-08-19 ヒカ☆ラボ
  2. 2. ハッシュタグは #ヒカラボ
  3. 3. 自己紹介 • 鈴木 たかのり / Takanori Suzuki • Twitter: @takanory
  4. 4. PyCon JP 2015 Chair
  5. 5. Python Bouldering部 部長
  6. 6. • Pythonで開発してる会社 • 一部分を書いた→ • http://www.shuwasystem.co.jp/products/7980html/4315.html BeProud所属
  7. 7. • 2015年4月発売 • 内容はここから主に引用 • 128ページ、1,980円+税 • http://gihyo.jp/book/2015/978-4-7741-7320-7 Pythonエンジニア養成読本
  8. 8. 来場ありがとうござい ます
  9. 9. Pythonでのプログラミングに 興味ある人?
  10. 10. Python 書いたことある人?
  11. 11. 他の言語でプログラム 書いたことある人?
  12. 12. プログラム 書いたことない人?
  13. 13. 注意事項
  14. 14. 今日の内容だけで Python書けるように ならないよ
  15. 15. 今日やること 1. Pythonの特徴 2. 言語の特徴 3. インストール 4. 基本的な言語仕様 5. Python 2と3の違い 6. よく使う標準ライブラリ 7. よく使うサードパーティ製パッケージ 8. どうやって学ぶか
  16. 16. 1. Pythonの特徴
  17. 17. Q. Pythonってなにがで きるの?
  18. 18. A. なんでもできます
  19. 19. きれいに書きやすい ので保守しやすい
  20. 20. ちゃんとしてる • 20年以上開発が継続 • 後方互換性あり • PEPというルールに則って機能を拡張
  21. 21. Python 2 と 3 • 最新は Python 2.7.10 と 3.4.3(もうすぐ3.5.0) • 一部後方互換性なし • 今日は Python 3 ベースでやります
  22. 22. 2. 言語の特徴
  23. 23. 今日やること 1. Pythonの特徴 2. 言語の特徴 ← イマココ 3. インストール 4. 基本的な言語仕様 5. Python 2と3の違い 6. よく使う標準ライブラリ 7. よく使うサードパーティ製パッケージ 8. どうやって学ぶか
  24. 24. インデントでブロック構造 for i in range(10): if i % 5 == 0: print('ham') elif i % 3 == 0: print('eggs') else: print('spam')
  25. 25. 対話モード $ 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
  26. 26. バッテリー付属 • 200+ の便利な標準ライブラリ • http://docs.python.jp/3/library/
  27. 27. 豊富な外部パッケージ • 60,000+ の外部パッケージ • PyPI: Python Package Index • http://pypi.python.org/ • 「パイピーアイ」と読むらしい
  28. 28. 3. インストール
  29. 29. python.orgからdownload • Mac, Windowsはインストーラーからどうぞ • https://www.python.org/downloads/ • WindowsはPATHの設定をお忘れなく • Linux はそれぞれのパッケージ管理からどうぞ
  30. 30. 4. 基本的な言語仕様
  31. 31. 今日やること 1. Pythonの特徴 2. 言語の特徴 3. インストール 4. 基本的な言語仕様 ← イマココ 5. Python 2と3の違い 6. よく使う標準ライブラリ 7. よく使うサードパーティ製パッケージ 8. どうやって学ぶか
  32. 32. 対話モードで数値計算 $ python >>> 1 + 1 2 >>> 2 * 3 6 >>> width = 60 >>> height = 90 >>> width * height 5400
  33. 33. 文字列とリスト >>> ‘Hello world' ‘Hello world' >>> "Monty Python's Flying Circus" "Monty Python's Flying Circus" >>> ['Hello', 3] ['Hello', 3]
  34. 34. 関数と組み込み関数 >>> def add(a, b): ... return a + b ... >>> add(1, 3) 4 >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  35. 35. FizzBuzzで知る言語仕様 • 1から順番に数字を言う • 3で割り切れる時は「Fizz」と言う • 5で割り切れる時は「Buzz」と言う • 3と5で割り切れる時は「FizzBuzz」と言う
  36. 36. Pythonファイルを実行 def fizzbuzz(num): return num print(fizzbuzz(4)) $ python fizzbuzz.py 4
  37. 37. for: ループ処理 def fizzbuzz(num): return num for num in range(1, 101): print(fizzbuzz(num)) $ python fizzbuzz.py 1 2 3 : 100
  38. 38. 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)
  39. 39. FizzBuzzの完成 $ python fizzbuzz.py 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz : Buzz
  40. 40. その他の言語仕様 • データ型 • 文字列の操作 • コレクション • ファイル操作 • モジュール
  41. 41. データ型 • int: 整数型 • float: 浮動小数点型 • str: 文字列型 • bytes: バイト型
  42. 42. データ型 >>> type(1) <class 'int'> >>> type(1.1) <class 'float'> >>> type('日本語') <class 'str'> >>> '日本語'.encode('utf-8') b'xe6x97xa5xe6x9cxacxe8xaax9e' >>> type('日本語'.encode('utf-8')) <class 'bytes'>
  43. 43. 文字列の操作 >>> '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']
  44. 44. コレクション • list: リスト • tuple: タプル • dict: 辞書 • set: 集合
  45. 45. 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
  46. 46. 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',)
  47. 47. 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
  48. 48. set: 集合 >>> {'spam', 'ham'} {'ham', 'spam'} >>> {'spam', 'spam', 'spam'} {'spam'} >>> set1 = {'spam', 'ham'} >>> set2 = {'ham', 'eggs'} >>> set1 & set2 # 集合の積 {'ham'} >>> set1 | set2 # 集合の和 {'ham', 'eggs', 'spam'}
  49. 49. ファイル操作 >>> with open('todo.txt') as f: # ファイルを開く ... todo_str = f.read() ... >>> with open('memo.txt', 'w') as f: # 書き込む ... f.write('Hello worldn') ... 12 >>> with open('memo.txt', 'a', encoding='utf-8') as f: # 文字コード指定して追記 ... f.write('こんにちは世界n') ... 8
  50. 50. モジュール 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
  51. 51. 5. Python 2 と 3 の違い
  52. 52. 今日やること 1. Pythonの特徴 2. 言語の特徴 3. インストール 4. 基本的な言語仕様 5. Python 2と3の違い ← イマココ 6. よく使う標準ライブラリ 7. よく使うサードパーティ製パッケージ 8. どうやって学ぶか
  53. 53. printが文から関数に >>> print # 空行を出力 >>> print 'Hello Python 2!' Hello Python 2! Python 2のprint文 Python 3のprint関数 >>> print() # 空行を出力 >>> print('Hello Python 3!') Hello Python 3!
  54. 54. 文字列が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'>
  55. 55. 整数の割り算が実数 Python 2の整数の割り算の結果は整数 Python 3は浮動小数点数 >>> 4 / 2 2 >>> 1 / 3 0 >>> 4 / 2 2.0 >>> 1 / 3 0.3333333333333333
  56. 56. 標準ライブラリの再構成 • 名前が変更 • ConfigParser -> configparser • 統合 • StringIO, cStringIO -> io • 再構成 • urllib, urllib2, urlparse -> urllib.*
  57. 57. 6. よく使う 標準ライブラリ
  58. 58. 今日やること 1. Pythonの特徴 2. 言語の特徴 3. インストール 4. 基本的な言語仕様 5. Python 2と3の違い 6. よく使う標準ライブラリ← イマココ 7. よく使うサードパーティ製パッケージ 8. どうやって学ぶか
  59. 59. 200+ の標準ライブラリ http://docs.python.jp/3/library/
  60. 60. 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'
  61. 61. sys, os: システムパラメータとOS >>> import os >>> os.mkdir('spam') >>> os.chdir('spam') >>> os.getcwd() # 現在のディレクトリ '/Users/takanori/hikalab/spam' >>> import sys >>> sys.exit(1)
  62. 62. 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
  63. 63. 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']
  64. 64. 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')]
  65. 65. shutil: 高レベルなファイル操作 >>> import shutil >>> shutil.copytree('src_dir', 'dst_dir') >>> shutil.rmtree('src_dir')
  66. 66. 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'}
  67. 67. 7. よく使う サードパーティ製 パッケージ
  68. 68. 今日やること 1. Pythonの特徴 2. 言語の特徴 3. インストール 4. 基本的な言語仕様 5. Python 2と3の違い 6. よく使う標準ライブラリ 7. よく使うサードパーティ製パッケージ← イマココ 8. どうやって学ぶか
  69. 69. 60,000+ の サードパーティ製 パッケージ https://pypi.python.org/pypi
  70. 70. pipとvirtualenv • pip: サードパーティ製パッケージをインストールす るためのコマンド • virtualenv: 独立したPython環境を作る
  71. 71. pip のインストール $ wget https://bootstrap.pypa.io/get-pip.py $ python get-pip.py $ pip install (package name)
  72. 72. 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'
  73. 73. 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)
  74. 74. 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』に集まれ!!
  75. 75. 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. 組み込み定数
  76. 76. 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で保存
  77. 77. コーディング規約 • PEP 0008 -- Style Guide for Python Code • https://www.python.org/dev/peps/pep-0008/ • pep8: コーディング規約のチェック • autopep8: 自動的にPEP8形式にする • flake8: pep8 + ソースコードのチェック
  78. 78. 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/
  79. 79. PyData関連 • NumPy: 行列計算 • SciPy: 化学計算 • Pandas: データ操作と処理 • matplotlib: データ可視化 • Chiner: 深層学習
  80. 80. その他 • Sphinx: ドキュメント作成 • Ansible: システム構成管理 • pytz: タイムゾーン情報 • paramiko: SSH2接続
  81. 81. 8. どうやって学ぶか
  82. 82. Pythonエンジニア養成読本 • これを買って復習しよう
  83. 83. PyCon JP 2015 • https://pycon.jp/2015/ja/ • 10月9日(金): チュートリアル • 10月10日(土)、11日(日): カンファレンス • 10月12日(月・祝): 開発スプリント
  84. 84. 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/
  85. 85. まとめ
  86. 86. まとめ • 復習しよう • コードを書こう • コミュニティに飛び込もう
  87. 87. Happy Hacking !

×