00:00 このビデオでは、位置のみの引数という新機能についてお話します。 まずは例題から始めてもらいます。 このビデオではまず、float()という組み込み関数についてお話したいと思います。

00:09float() は、このようにテキスト文字列や数値を float オブジェクトに変換するために使用することができます。 組み込み関数floathelp()関数を出して、このfloatのシグネチャを見てみると、パラメータの後にスラッシュ(/)があることに気がつくと思います。 これは何を意味するのでしょうか。 それは、float()のパラメータは1つで、xという名前であることがわかりました。 float()を使うときは、キーワードではなく位置だけで引数を指定することが許されているんだ。 どういうことか、お見せしましょう。 それではもう一度、ここにあるスラッシュ(/)に注目してください。 qを押すと、help()から抜け出せます。 そこでもう一度float()を試して、x="3.8"-テキスト文字列-と言うと、ここではfloat() takes no keyword argumentsと表示されます。この位置引数だけです。

00:53 引数を指定するときにキーワードを使用することはできないんですね。 Python 3.8以前は、自作関数で引数を位置指定のみにすることを簡単に指定する方法がありませんでした。 そのため、このような関数-ここではincr() (increment)と呼ぶことにします。

01:10 incr()を呼び出して、floatを与えたとすると、どちらの方法でも使用でき、それは通常の引数の場合です。 そこがPython3.8で変更されたところだ

01:24increment incr()関数を位置だけの引数を受け付けるように書き換えればいいんだよ。 コンマ(,)の後にスラッシュ(/)を入れて、あとは同じです。

01:40 incr()を呼び出すと、うまくいきますね。 しかし、もし今キーワードを使うとしたら、新しいことが起こります。 ここにはincr() got some positional-only arguments passed as keyword arguments.

01:55と書いてありますが、これは例外を発生させてTypeErrorを与えることになるわけです。 これはほとんど位置だけの引数と通常の引数の間の仕切りとして使うことができます。

02:07 greet()という名前の新しい関数を定義してください。 greet() は位置のみの引数として name を取り、そこにスラッシュ (/) を入れて、位置のみの引数と通常の引数を組み合わせることができるようにします。 つまり、ここにgreetingの正規引数があります。

02:23 ここでgreetingを含むf-stringを返すことになります。 まだf文字列を扱ったことがない人は、下の文章にそれに関する記事や講座へのリンクを貼っておきます。

02:31 カンマ、スペース、nameのことです。 つまり、greet()を呼び出すとき、もう一度言いますが、デフォルトのgreeting"Hello"になります。

02:37 ここでnameをポジションオンリーで入力します。

02:43 いいね。 greet()

02:49 を呼び出して greeting を与えることもできます。

02:55 しかし、できないこと、あるいはエラーになることは、name,

03:08 と入力すると TypeError という例外が発生するところですね。 ここでも、前の incr() のときと同じように、greet() にはキーワード引数として位置だけの引数がいくつか渡され、特に name が渡されました。

03:26位置のみの引数がコードを改善する場面は多くないことが分かると思います。

03:35 第一に、位置のみの引数は、自然な順序を持つが良い説明的な名前を付けるのが難しい引数がある場合に意味を持ちます。 特に、他のコードがそれらの名前に依存することを心配せずに、パラメータの名前を変更できます。

03:57 この情報を繰り返すと、位置のみの引数はどのように指定するのでしょうか。 スラッシュ (/) を使って、その前の引数が位置によって指定されなければならないことを表します。 スラッシュ記法について詳しく知るには、PEP 457に詳しい説明があります。 PEP 570 は Python の位置指定のみのパラメータについてより深く掘り下げています。

04:20位置のみの引数を補完するのはキーワードのみの引数で、これらはPython 3 のどのバージョンでも利用可能です。

04:31* 以降の引数はキーワードで指定する必要があります。 ここでは華氏に変換する例を示しますが、キーワードのみの引数としてcelsiusを指定していることがわかります。

04:46 この関数を試してもらいましょう。 ここで、キーワードのみを指定するには、*を付けて、その後にキーワード引数を付けます(この場合はcelsiusです)。 そしてこの場合、return

05:0232 + celsius * 9 / 5 となります。 ここで、to_fahrenheit()を呼び出して、40摂氏という値を与えると、takes 0 positional arguments but 1 was given.

05:16 と表示されるので、適切に呼び出すにはキーワードが必要でした。 あと、状況によっては、位置だけの引数、通常の引数、キーワードだけの引数を組み合わせたい場合もあります。 その場合は、そのスラッシュ(/)とアスタリスク(*)で区切って指定します。

05:35So こんな感じです。 ここで、textの位置指定オンリー、スラッシュ(/)。 ここでは、標準の引数。

05:46 そして、borderの後、*を使って、widthのキーワードのみの引数、デフォルト値は50

05:54 text引数の値の前にスペースを入れて、さらにスペースを入れたf文字列を返していますね。 で、その引数から取ってるwidthborderの2つのパラメータで.center()のテキスト文字列メソッドを使ってる。

06:08 位置的にはtextだけなんだけどね。 headline()から始まって"Positional-only".

06:18ここで、width50でそのタイプのボーダーになるデフォルト値を見ることができます、そのように見えます。 繰り返しますが、これは位置のみなので、text,

06:35 を指定するとエラーになり、TypeError が発生します。 borderの場合は、通常の引数です。

06:49 あるいは、borderはコロン(:)と等しいと指定することも可能です。 これはどちらのスタイルも受け入れる。

07:07 デフォルトの値 38 を上書きします。

07:15 38 という値だけを指定すると、これまた例外が発生して TypeError: headline() takes 1 to 2 positional arguments but 3 were given が表示されるでしょう。

07:29 このように、位置のみの引数は、通常の引数とキーワードのみの引数をうまく補完することができるのです。 次のビデオでは、Python 3.8がより正確な型を使用することでどのように型チェックを強化しているかを学びます。

コメントを残す

メールアドレスが公開されることはありません。