こんにちは、PyQチームのkamekoです。
2019年10月14日にPython3.8.0がリリースされました。
これにともない、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=3
と x=
付きで表示されるようになりました。
>>> 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の新機能に関する解説を追加しました。ぜひ、ご一読ください。
- 論理演算の実行順序(3つ以上条件式がある場合) 3問目
- 文字列の主なメソッド 4問目
- for文を書いてみよう 4問目
- 入力と出力 1問目
- JSONとpickleの使い方 1問目
- 仮引数の使い方を学ぼう 3問目
Python3.8対応していないクエスト
以下のクエストは利用ライブラリーがPython3.8に未対応の関係で、Python3.7を利用しています。
- スクレイピング パート
- 機械学習Webアプリの作成 パート
更新されたクエスト
今回の更新では既存のクエストの修正も行いました。
詳しくは、 更新履歴2019-12-18 をご覧ください。