Pythonの現在とこれからと
Takanori Suzuki
<OSS X Users Meeting> #31 / 2021 Aug 25
今日話すこと 🗣
Pythonとは
Pythonの旬なプロジェクト
Python開発の歴史
Python言語アップデート
Pythonの未来
スクショ 📸 ツイート 🐦 👍
@takanory
スライド 💻
最初に質問
Python知ってる人 🙋♂️
Python使ったことある人 🙋♀️
Python今使っている人 🙋♂️
Who am I(お前誰よ) 👤
鈴木たかのり(@takanory)
PyCon JP Association 副代表理事
株式会社BeProud 役員/Python Climber
好き:フェレット、🍺、LEGO/趣味:🎺、🧗
Pythonとは 🐍
Pythonとは 🐍
汎用のプログラミング言語
動的型付け
1991年に0.9がリリース
最新バージョンは 3.9.6
Python 2系は2020年1月1日にEOL
読みやすい構文
インデントが構文
PEP 8 というコーディング規約
for num in range(1, 101):
if num % 15 == 0:
print('FizzBuzz')
elif num % 5 == 0:
print('Fizz')
elif num % 3 == 0:
print('Buzz')
else:
print(num)
後方互換性
3.9で書いたプログラム→基本3.10で動く
利用するサードパーティライブラリ次第(後述)
Python 2系→3系では後方互換性を犠牲に
移行にかなりかかった
Pythonリリースの歴史
豊富な標準ライブラリ
標準ライブラリでいろいろできる
バッテリー同梱 とも言われる
ただ多すぎて使われてなさそうなものも…
公式ドキュメント: Python 標準ライブラリ
豊富なサードパーティライブラリ
PyPI (パイピーアイ)からインストール
$ pip install パッケージ名
豊富なサードパーティライブラリ
Webフレームワーク、スクレイピング
行列計算、機械学習、深層学習
コンピュータービジョン、画像処理
データ分析、可視化
などなど
豊富なサードパーティライブラリ
他のツールの組み込み言語
3DCG
blender, Mayaなど
ゲームエンジン
Unreal Engine
Pythonとは 🐍 - まとめ
読みやすい構文
後方互換性を維持
豊富な標準ライブラリ、サードパーティライブラリ
Pythonの旬なプロジェクト 🔥
旬っぽいプロジェクトをいくつか紹介
FastAPI
API構築のための高速なWebフレームワーク
JupyterLab
Webベースのプログラムの対話型実行環境
PyCaret
ローコードのMLライブラリ(AutoMLサポート)
AWS CLI / Google Cloud SDK
クラウドを管理するコマンド群
Black
妥協のないコードフォーマッター
Poetry
パッケージの依存関係の管理、構築
Pythonの旬なプロジェクト 🔥 - まとめ
気になるものがあったら試してみて
FastAPI
JupyterLab
PyCaret
AWSCLI / Google Cloud SDK
Black
Poetry
Python開発の歴史 🕰
Pythonの拡張はPEPで提案
PEP: Python Enhancement Proposal
2000年頃から運用
PEPを書いて提案
メーリングリストで議論
最後に採用/不採用を判断
BDFL: 優しい終身の独裁者
BDFL が採用/不採用を最終決定
BDFL = Guido van Rossum
BDFL Delegatesで他の人に判断を委譲可能
BDFLの引退
2018年7月にBDFLを引退するメールを送信
セイウチ演算子(
:=
)でもめたのがきっかけか?
Pythonの新しい運営モデル
PEP 8000 – Python Language Governance Proposal Overview
複数のガバナンスモデルが提案され投票
PEP 8016 – The Steering Council Model
この案が採用された
The Steering Council Model
毎年5名のCouncil membersを投票で決める
Council membersがPEPの採用/不採用を決定
2019年はGuidoがいたが、2020以降は立候補していない
2021 Council member
P.Galindo Salgado, B.Cannon, T.Wouters
C.Willing, B.Warsaw
Python Steering CouncilのKeynote
Python開発の歴史 🕰 - まとめ
2018年に大きく運営方針が変わった
今後も継続的に開発は続きそう
Council Modelへの移行はいいタイミングだったかも
宣伝 📺
ここで休憩がてらコミュニティ活動の宣伝
PyCon JP
国内最大のPythonイベント(2021.pycon.jp)
2021年10月15日(金)、16日(土)
PyCon JP TV
Pythonについて月1ライブ配信(tv.pycon.jp)
次回は2021年9月3日(金)
Python Boot Camp
日本中で開催する初心者向けチュートリアル
Python Charity Talks in Japan
今回は地域コミュニティ祭り
2021年9月11日(土)
宣伝ここまで
興味があるものに参加してみてください
Python言語アップデート 🆕
Python言語アップデート 🆕
現在はPython 3.9.6
2021年10月に3.10.0がリリース予定
今後は年1回マイナーバージョンが上がる
3.N.0リリースから5年間サポート
最近の主な新機能
3.6: フォーマット済み文字列リテラル
3.7: データクラス
3.8: 代入式
3.9: 辞書の和集合演算子
3.6: フォーマット済み文字列リテラル
f-string ともいう
f'{式}や{式:書式}'
>>> name = 'たかのり'
>>> power = 530000
>>> f'{name}の戦闘力は{power:,}' # f-string
'たかのりの戦闘力は530,000'
>>> '{}の戦闘力は{:,}'.format(name, power) # それ以前
3.7: データクラス
@dataclass
デコレーターで作れる
@dataclass
class Point:
x: float
y: float
z: float = 0.0
p = Point(1.5, 2.5)
print(p) # "Point(x=1.5, y=2.5, z=0.0)"
3.8: 代入式
:=
演算子: 変数に値を入れて、その値を返す別名: セイウチ演算子 (Walrus Operator)
name = 'じゅげむじゅげむごこうのすりきれ'
if (n := len(name)) > 10:
print(f"名前が長すぎます({n}文字)")
# それ以前
if (len(name)) > 10:
print(f"名前が長すぎます({len(name)}文字)")
3.9: 辞書の和集合演算子
辞書のマージ(
|
)と更新(|=
)演算子
>>> x = {"key1": "v1/x", "key2": "v2/x"}
>>> y = {"key2": "v2/y", "key3": "v3/y"}
>>> x | y
{'key1': 'v1/x', 'key2': 'v2/y', 'key3': 'v3/y'}
>>> y | x
{'key2': 'v2/x', 'key3': 'v3/y', 'key1': 'v1/x'}
>>>
>>> {**x, **y} # それ以前
{'key1': 'v1/x', 'key2': 'v2/y', 'key3': 'v3/y'}
型ヒント
動的型付け言語だが 型ヒント が付けられる
Python 3.5から導入
mypy などのツールで静的チェック
ヒントなので実行時は評価されない
def greeting(name: str) -> str:
# name: str で引数nameの型が文字列
# -> str で返り値が文字列
return 'Hello ' + name
型ヒント - なにが嬉しいの?
型安全なプログラムになる
大規模プロジェクトなどで有効
APIドキュメントに型情報が入る
エディターが型ヒントをもとに教えてくれる
型ヒント - 発展中
徐々に書き方が便利になってきている
from __future__ import annotations
で最新(3.10)の書き方ができる
# Python 3.10からこう書ける
def square(number: int | float) -> int | float:
return number ** 2
# それ以前
from typing import Union
def square(number: Union[int, float]) -> Union[int, float]:
return number ** 2
型ヒント - 参考資料
Python 3.10の主な新機能
Better error messages
Structural Pattern Matching
Better error messages
エラーメッセージがわかりやすくなった
>>> if name = 'takanori': # Python 3.9以前
File "<stdin>", line 1
if name = 'takanori':
^
SyntaxError: invalid syntax
>>> if name = 'takanori': # Python 3.10
File "<stdin>", line 1
if name = 'takanori':
^^^^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':='
instead of '='?
「たぶん、
=
ではなく==
や:=
の意味では?」
Better error messages
IndentationErrorもわかりやすく
>>> for i in range(10): # Python 3.9以前
... print(i)
File "<stdin>", line 2
print(i)
^
IndentationError: expected an indented block
>>> for i in range(10): # Python 3.10
... print(i)
File "<stdin>", line 2
print(i)
^
IndentationError: expected an indented block after 'for'
statement on line 1
「1行目の
for
のあとにインデントが必要」
Structural Pattern Matching
match
文とcase
文でいずれかのパターンにマッチ
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
Structural Pattern Matching
シンプルなリテラルにマッチ
def http_error(status):
match status:
case 400:
return "Bad request"
case 401 | 403 | 404: # or
return "Not allowed"
case 418:
return "I'm a teapot"
case _: # ワイルドカード
return "Something's wrong with the Internet"
Structural Pattern Matching
(x, y)
のタプルの値でマッチ
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("Not a point")
Structural Pattern Matching
インスタンスの型でマッチ
def dump(node: Node) -> str:
match node:
case Assignment(target, value):
return f"{target} = {dump(value)}"
case Print(value):
return f"print({dump(value)})"
case Operation(left, op, right):
return f"({dump(left)} {op} {dump(right)})"
Structural Pattern Matching - 参考情報
Structural Pattern Matching - 参考情報
ODC 2021 Online セミナープログラム
2021年8月28日(土) 12:00 〜 12:45
-
10月16日(土)のキーノート
Structural Pattern Matchingの中心人物
Python言語アップデート 🆕 - まとめ
最近はあまり大きい変更はなかった
Better error messagesで初心者に優しく
Structural Pattern Matchingは注目の機能追加
Pythonの未来 🚀
Python 4はいつ出るの?
現在その計画はなく3.11, 3.12…と続く
3から4への移行は、2から3のようにはしない
Python 4 FAQ.
— Guido van Rossum (@gvanrossum) September 16, 2020
1. The version after 3.9 is 3.10; in fact it already exists (in github master).
2. If there ever is a version 4, the transition from 3 to 4 will be more like that from 1 to 2 rather than 2 to 3.
Pythonの高速化
PyCon US 2021のLanuguage Summitでの発表
Making CPython faster, Guido van Rossum
発表資料: FasterCPythonDark.pdf
Blog記事: The 2021 Python Language Summit: Making CPython Faster
The “Shannon Plan”
4年で5倍の高速化(1年で1.5倍)
資金調達を検討中
Microsoftのサポート
Guido氏はDropboxを去って引退
しかしパンデミックで家にいてつまらない
Microsoftに応募して採用された
自由にプロジェクトが選べる
Pythonの高速化を進める
faster-cpythonリポジトリ
Pythonの未来 🚀 - まとめ
Python 3系がしばらく続きそう
Pythonの高速化に注目
まとめ
Pythonリリースから30年ほど経過
色々あったが運営の体制は維持されている
現在も少しずつ改良されている
今後は高速化にも期待
Thank you 🙏
>>> import __hello__
Hello world!