This content originally appeared on Twilio Blog and was authored by Sam Agnew
米国東部では17年おきにブルードXと呼ばれる種類のセミが、数十億匹も地中から這い出してきます。前回の発生が2004年、そして今年2021年に再び羽化の時期を迎えます。
これらのセミたちが追い付くには多くのことが変化した17年ですが、Pythonプログラミング言語も非常に多くの更新を経てきました。2004年5月にリリースされたPython 2.3.4を調べて、この周期ゼの視点から、現在のPythonでのコーディングと異なる点を確認しましょう。
from may_2004 import newest_python_version
旧バージョンのPythonはpython.orgから引き続き入手可能です。前回周期ゼミが発生した頃のPython 2.3.4も含まれます。
このリリースアーカイブページには、Windowsインストーラーのほか、2つのtarballソースリリースファイルが置かれています。これらのファイルは自ら手動でコンパイルするか、MacPythonで使用することができます。私はMacユーザーですが、利便性から主に仮想マシンでWindowsインストーラーを実行して使用しています。
インストール後、Pythonシェルを開いて好きなコードを実行できます。
Python 2.3.4の新機能
Python 2.3.4には多くの新機能が搭載されていました。いくつか見てみましょう。
標準のsetデータタイプ
前回の周期ゼミが使用したPythonでは、set用の新しいデータタイプの利用が可能になりました。これらの機能を使うには手動でsets
モジュールをインポートする必要がありますが、union
やintersection
などの基本的な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 2.3以前のTrue
とFalse
は言語に含まれる定数でしたが、専用のタイプを持たない単なる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はこのような厳密さは不要と記されており、その点は現在も受け継がれているようです。
拡張スライス
Python 2.3では、組み込み型のリスト、tuple、文字列シーケンスタイプで3番目のstep
とstride
引数をサポートしました。それ以前もスライス構文で使用できましたが、この機能を広く使用する多くの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ライブラリーなどを使用すると、さらに効率よく作成できます。
モジュールインストール
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年バージョンのファイル読み取りコードは、もう少し整理されています。
2004年にはなく、現在存在するPythonの機能
2004年から多くの変化がありました。周期ゼミたちがPythonを使うとしたら、多くの情報を更新しなければなりません。前回の出現時期の後で追加された、いくつかの機能を振り返りましょう。
pip
先述のように、当時の周期ゼミはサードパーティモジュールのインストールを、Distutilsにより手作業で行う必要がありました。現在は、パッケージ管理ソフトウェアpipがあります。Python Package Indexにアクセスし、モジュールのインストールは大幅に簡単になりました。
自分でsetup.py
スクリプトを実行しなくても、例えば次のようにテキストメッセージの送信コードを作成できます。
pip install twilio
数秒(またはモジュールのインストールに要する時間だけ)で、サードパーティツールが使用できるようになります。また、仮想環境を使用すれば、プロジェクトの違いにより、異なるバージョンの依存関係が互いに干渉しないようにすることもできます。可能性は無限に広がります。
Web開発フレームワーク
さまざまなフレームワークを利用して、Webアプリケーション開発をPythonで行えます。最も利用されているのは、DjangoとFlaskの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点を取り上げています。
- 非同期ルーチンは、最終結果を待ちながら「一時停止」し、その間に他のルーチンを実行できる。
- 非同期コードは、上記の機構により、同時実行を促す。別の言い方をすると、非同期コードは並行して動作するイメージとなる。
このように非同期コードとは、結果を待つ間に一度処理を中断し、その間に他のコードを実行できるコードです。他のコードの実行を「ブロックする」ことはありません。
その他、aiohttpやaiofilesなど、より特化したサードパーティライブラリーも存在し、HTTPリクエストを実行したり、ファイルに非同期で書き込んだりするために使用します。
ではまた2038年に
思い返すと楽しい道のりでした。これをお読みのセミの皆さんに役立つ内容であればと願います。17年後に再び現れる周期ゼミですが、2038年にPythonの変遷を知れば技術の進化に驚くことでしょう。それまでPython言語とコミュニティが活躍を続けるかどうかは、私たち人間次第です。
- Email: sagnew@twilio.com
- Twitter: @Sagnewshreds
- Github: Sagnew
- Twitch (streaming live code): Sagnewshreds
This content originally appeared on Twilio Blog and was authored by Sam Agnew
Sam Agnew | Sciencx (2021-10-14T11:31:21+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/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.