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 / 2016 Jan 12

2,103 views

Published on

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

Published in: Software
  • Be the first to comment

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

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

×