Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

PyQ実行環境のPython3.8対応報告

f:id:kenken0326:20191223103904p:plain

こんにちは、PyQチームのkamekoです。

2019年10月14日にPython3.8.0がリリースされました。

blog.pyq.jp

これにともない、PyQクエスト実行環境のPythonのバージョンをPython3.8.0にバージョンアップしました。
PyQでは、お客様が最新のPython環境で学習ができるようにPythonやライブラリーのアップデートを行っています。
あわせてPython3.8対応の問題をリリースしました。追加した問題とPython3.8で追加された機能の特徴を紹介します。

Python3.8用の問題と解説を追加

Python3.8で追加された機能をいくつか紹介します。

Positional-only parameters

位置引数を強制する機能が追加されました。
関数の引数のリストに / があると / より前にある引数はすべて 位置引数 としてしか使えない機能です。

以下のような台形の面積を求める関数 calc_trapezoid_area を作る場合を考えてみます。

def calc_trapezoid_area(top, bottom, height):
    return (top + bottom) / 2 * height

台形の面積の求め方は、「上底たす下底かける高さわる2」という公式が有名です。
関数作成者が関数を使うときに必ず前から上底、下底、高さの順番で引数を指定してほしいと考えても
Python3.7まではキーワード指定が可能でした。
利用者の気持ちひとつで指定順を変更できました。

calc_trapezoid_area(height=3, top=2, bottom=4)

しかし、Python3.8からは / を書くことで、位置引数を強制できるようなりました。

def calc_trapezoid_area(top, bottom, height, /):
    return (top + bottom) / 2 * height

キーワード引数の形で指定すると TypeError になります。

>>> calc_trapezoid_area(height=3, top=2, bottom=4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: calc_trapezoid_area() got some positional-only arguments passed as keyword arguments: 'top, bottom, height'

必ず以下のように位置引数で指定します。

>>> calc_trapezoid_area(2, 4, 3)
9.0

この機能を記述しながら学習できる問題を仮引数の使い方を学ぼう に追加しました。

解説を追加した場所

他にもPython3.8に追加された機能で便利なものがあります。

日時を文字列に変換する方法を学ぼう 1問目で紹介している f-string に追加された機能です。

これまでは、変数の値を開発中に表示する場合、 print("x=", x) などと書いていました。 Python3.8からは、 f'{x=}' と書くだけで x=3x= 付きで表示されるようになりました。

>>> x = 10
>>> print("x =", x)  # Python3.5まで
x = 10
>>> print(f'x = {x}')  # Python3.7まで
x = 10
>>> print(f'{x = }')  # Python3.8から
x = 10

他にも以下のクエストにPython3.8の新機能に関する解説を追加しました。ぜひ、ご一読ください。

Python3.8対応していないクエスト

以下のクエストは利用ライブラリーがPython3.8に未対応の関係で、Python3.7を利用しています。

更新されたクエスト

今回の更新では既存のクエストの修正も行いました。
詳しくは、 更新履歴2019-12-18 をご覧ください。

Copyright ©2017- BeProud Inc. All rights reserved.