17年周期ゼミ「ブルードX」から見たPythonの変遷

この記事はTwilio Developer EvangelistのSam Agnewがこちら(英語)で執筆した記事を日本語化したものです。
また、オリジナル版の投稿日は2021年6月4日です。

米国東部では17年おきにブルードXと呼ばれる種類のセミが、数十億匹も地中から這い出してきます。前回の発生が2004年、そして今年2021年に再び羽化の時期を迎えます。
これらのセミたちが追い付くには多くのことが変化した17年ですが、Pythonプログラミ…

この記事はTwilio Developer EvangelistのSam Agnewがこちら(英語)で執筆した記事を日本語化したものです。

また、オリジナル版の投稿日は2021年6月4日です。

米国東部では17年おきにブルードXと呼ばれる種類のセミが、数十億匹も地中から這い出してきます。前回の発生が2004年、そして今年2021年に再び羽化の時期を迎えます。

これらのセミたちが追い付くには多くのことが変化した17年ですが、Pythonプログラミング言語も非常に多くの更新を経てきました。2004年5月にリリースされたPython 2.3.4を調べて、この周期ゼの視点から、現在のPythonでのコーディングと異なる点を確認しましょう。

cicadas

from may_2004 import newest_python_version

旧バージョンのPythonはpython.orgから引き続き入手可能です。前回周期ゼミが発生した頃のPython 2.3.4も含まれます。

このリリースアーカイブページには、Windowsインストーラーのほか、2つのtarballソースリリースファイルが置かれています。これらのファイルは自ら手動でコンパイルするか、MacPythonで使用することができます。私はMacユーザーですが、利便性から主に仮想マシンでWindowsインストーラーを実行して使用しています。

Python 2.3.4 Windows installer

インストール後、Pythonシェルを開いて好きなコードを実行できます。

python command line shell

Python 2.3.4の新機能

Python 2.3.4 shell icon on toolbar

Python 2.3.4には多くの新機能が搭載されていました。いくつか見てみましょう。

標準のsetデータタイプ

前回の周期ゼミが使用したPythonでは、set用の新しいデータタイプの利用が可能になりました。これらの機能を使うには手動でsetsモジュールをインポートする必要がありますが、unionintersectionなどの基本的なsetオペレーションが実行できました。

>>> import sets
>>> S = sets.Set([1,2,3])
>>> S
Set([1, 2, 3])
>>> 1 in S
True
>>> 0 in S
False
>>> S.add(5)
>>> S.remove(3)
>>> S
Set([1, 2, 5])
>>> S2 = sets.Set([4,5,6])
>>> S.union(S2)
Set([1, 2, 4, 5, 6])
>>> S.intersection(S2)
Set([5])
>>> S1 = sets.Set([1])
>>> S.issuperset(S1)
True
>>> S1.issubset(S2)
False
>>>

現在、この機能は言語に組み込まれ、インポートの必要はありません。

Python 3.9.5 shell

ブーリアンタイプ

Python 2.3以前のTrueFalseは言語に含まれる定数でしたが、専用のタイプを持たない単なる1と0の整数値でした。2004年バージョンでは、boolタイプとして言語に組み込まれ、任意のPython値をTrueまたはFalseに変換するコンストラクタを備えています。

>>> bool(1)
True
>>> bool(0)
False
>>> bool([])
False
>>> bool( (1,) )
True

厳密なタイプチェックを言語に追加するためでなく、コードを読みやすくすることが目的でした。現在でも、あえてこれらの値を整数として扱うことが可能です。

>>> True + 1
2
>>> False + 1
1
>>> False * 75
0
>>> True * 75
75

リリースノートには、Pythonはこのような厳密さは不要と記されており、その点は現在も受け継がれているようです。

True and False operation in Python 3.9.5 shell

拡張スライス

Python 2.3では、組み込み型のリスト、tuple、文字列シーケンスタイプで3番目のstepstride引数をサポートしました。それ以前もスライス構文で使用できましたが、この機能を広く使用する多くのNumerical Pythonの開発者から要求を受けて組み込みタイプがサポートされるようになりました。

>>> L = range(10)
>>> L[::2]
[0, 2, 4, 6, 8]
>>> s='abcd'
>>> s[::-1]
'dcba'
>>> 

2004年の周期ゼミによるPythonの使用方法

Pythonの開発環境は、前回の周期ゼミ発生時とは大きく変化しています。そこで、現在でもよく使われる一般的なタスクのコーディング方法を見てみましょう。

HTTPリクエスト

HTTPリクエストを実行するため、2004年バージョンにurllib2が導入されました。HTTPSは使えませんが、それ以外は問題なく機能します。例えば、International Space Station Open Notify APIを使用し、ISSの現在位置データを取得するコードを作成しましょう。

>>> import urllib2
>>> url = 'http://api.open-notify.org/iss-now.json'
>>> req = urllib2.Request(url)
>>> response = urllib2.urlopen(req)
>>> print response.read()
{"message": "success", "timestamp": 1622701465, "iss_position": {"longitude": "7.4903", "latitude": "-46.3285"}}
>>>

新しいrequestsライブラリーなどを使用すると、さらに効率よく作成できます。

ISS Open Notify API

モジュールインストール

2004年の周期ゼミが標準ライブラリー以外のモジュールをインストールするとしたら、Distutilsを使う必要があります。

サードパーティモジュールには、お使いのシステムに対応するインストールソフトウェアが付属することもありますが、多くの場合は付属していません。インストーラーがない場合は、ソースからビルドする必要があります。Distutilsによりこれが標準化されました。ほとんどの場合、READMEに記された手順を読み、次のようなコマンドを実行すれば済みます。

python setup.py install

Python Package Indexは2003年時点で存在していましたが、pipは導入されていませんでした。

ファイルI/O

ファイルの読み取り/書き込みは、開発者がどのプログラミング言語でも行う、最も一般的なタスクです。Pythonでは、多くの開発者がwithステートメントを使用して、ファイルの読み取り/書き込みコードを簡潔にしています。これにより処理を完結させ、事後にファイルの閉じ忘れを防ぐことができます。

このキーワードは、2005年バージョンまでは使用できず、当時の周期ゼミはこのキーワードに馴染みを持たずにいたでしょう。次のコード例のように、ファイルはまだ手動で閉じる必要がありました。

>>> f=open('filename.txt', 'r')
>>> f.read()
'This is the entire file.\n'
>>> f.close()

2021年バージョンのファイル読み取りコードは、もう少し整理されています。

code for file reading

2004年にはなく、現在存在するPythonの機能

2004年から多くの変化がありました。周期ゼミたちがPythonを使うとしたら、多くの情報を更新しなければなりません。前回の出現時期の後で追加された、いくつかの機能を振り返りましょう。

pip

先述のように、当時の周期ゼミはサードパーティモジュールのインストールを、Distutilsにより手作業で行う必要がありました。現在は、パッケージ管理ソフトウェアpipがあります。Python Package Indexにアクセスし、モジュールのインストールは大幅に簡単になりました。

自分でsetup.pyスクリプトを実行しなくても、例えば次のようにテキストメッセージの送信コードを作成できます。

pip install twilio

数秒(またはモジュールのインストールに要する時間だけ)で、サードパーティツールが使用できるようになります。また、仮想環境を使用すれば、プロジェクトの違いにより、異なるバージョンの依存関係が互いに干渉しないようにすることもできます。可能性は無限に広がります。

Web開発フレームワーク

さまざまなフレームワークを利用して、Webアプリケーション開発をPythonで行えます。最も利用されているのは、DjangoFlaskの2つです。セミたちが大発生したのは、Djangoが初めてリリースされた2005年のわずか1年前。Webアプリケーション開発のために搭載された多くの機能を知れば、セミたちも驚くはずです。

機能するWebアプリをわずかなコードで作成できるFlaskにも、わくわくするでしょう。例えば、pip install flaskを実行した後、ファイルapp.pyを作成し、次のコードを追加するだけです。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

これで「Hello World」Webアプリの完成です!

asyncio

2004年に戻り、非同期のタスクを実行するには、スレッディングを使用する必要があります。現在、asyncioはPythonの標準ライブラリーに組み込まれ、あらゆるシナリオで非同期コードを作成できます。

こちらの詳しいチュートリアルでは、コードの非同期性が持つ主な特性から2点を取り上げています。

  • 非同期ルーチンは、最終結果を待ちながら「一時停止」し、その間に他のルーチンを実行できる。
  • 非同期コードは、上記の機構により、同時実行を促す。別の言い方をすると、非同期コードは並行して動作するイメージとなる。

このように非同期コードとは、結果を待つ間に一度処理を中断し、その間に他のコードを実行できるコードです。他のコードの実行を「ブロックする」ことはありません。

その他、aiohttpaiofilesなど、より特化したサードパーティライブラリーも存在し、HTTPリクエストを実行したり、ファイルに非同期で書き込んだりするために使用します。

ではまた2038年に

思い返すと楽しい道のりでした。これをお読みのセミの皆さんに役立つ内容であればと願います。17年後に再び現れる周期ゼミですが、2038年にPythonの変遷を知れば技術の進化に驚くことでしょう。それまでPython言語とコミュニティが活躍を続けるかどうかは、私たち人間次第です。


Print Share Comment Cite Upload Translate
APA
Sam Agnew | Sciencx (2024-03-28T08:32:49+00:00) » 17年周期ゼミ「ブルードX」から見たPythonの変遷. Retrieved from https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/.
MLA
" » 17年周期ゼミ「ブルードX」から見たPythonの変遷." Sam Agnew | Sciencx - Thursday October 14, 2021, https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/
HARVARD
Sam Agnew | Sciencx Thursday October 14, 2021 » 17年周期ゼミ「ブルードX」から見たPythonの変遷., viewed 2024-03-28T08:32:49+00:00,<https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/>
VANCOUVER
Sam Agnew | Sciencx - » 17年周期ゼミ「ブルードX」から見たPythonの変遷. [Internet]. [Accessed 2024-03-28T08:32:49+00:00]. Available from: https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/
CHICAGO
" » 17年周期ゼミ「ブルードX」から見たPythonの変遷." Sam Agnew | Sciencx - Accessed 2024-03-28T08:32:49+00:00. https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/
IEEE
" » 17年周期ゼミ「ブルードX」から見たPythonの変遷." Sam Agnew | Sciencx [Online]. Available: https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/. [Accessed: 2024-03-28T08:32:49+00:00]
rf:citation
» 17年周期ゼミ「ブルードX」から見たPythonの変遷 | Sam Agnew | Sciencx | https://www.scien.cx/2021/10/14/17%e5%b9%b4%e5%91%a8%e6%9c%9f%e3%82%bc%e3%83%9f%e3%80%8c%e3%83%96%e3%83%ab%e3%83%bc%e3%83%89x%e3%80%8d%e3%81%8b%e3%82%89%e8%a6%8b%e3%81%9fpython%e3%81%ae%e5%a4%89%e9%81%b7/ | 2024-03-28T08:32:49+00:00
https://github.com/addpipe/simple-recorderjs-demo