*和**为可变形参,但是平时在使用的时候感觉很少能有使用到的情况,有些不是很理解它们的用法和用处场景?
而且形参不是可以传递任意类型么?这样我写成:
1 2 3 4 5 |
|
加不加*貌似没什么区别?字典也是一样只不过变成print['keyname']而已。
那么*和**这玩意到底有什么用呢?
巴扎黑2017-04-18 09:17:29
私たちが役に立たないと感じる理由は、次のような思考状況に陥ることが多いためだと思います。
関数を書く人と関数を使う人は同一人物、つまり私です
作成者とユーザーが同じ人であれば、当然ながら、*
を選択するか、リストを直接使用するかは問題ではありません。
しかし今日、他の人の API を使用したり、他の人が使用できる関数を作成したりする場合、それほど柔軟性はありません
現時点では、*
が私たちを大いに助けてくれます
これら 2 つは非常に便利です!
例をいくつか挙げて説明します
関数 intro
があるとします:
今日はリストデータ lst
と dict データ dic
のセットを提供します:
*
または **
の代わりに、次のようにすることもできます。
*
と **
を使用します:
今日は加算関数を書きます:
リーリー3 つの数値を乗算するように拡張したい場合:
リーリーここで 2 つの質問があります:
1 つは、パラメーター リストが非常に長くなる可能性があることです
1 つは、Python では複数のロードが許可されていないため、同じ関数名を使用できないことです
しかし、*
はこの問題を解決できます:
もちろん、ここでパラメータをリストまたはタプルとして設計することもできると思うかもしれませんが、場合によっては、このアプローチの方が便利な場合があります。print
(Python3) の概念を参照できます。
リーリー
第 2 に、このアプローチはデコレーターを作成するための基礎となります。
リーリー
このアプローチを使用しない場合、変更したい関数が持つ可能性のあるさまざまなパラメーターを扱うことができないためです。タプルのアンパックに使用する場合(Python3)
リーリー
結論
私が回答した質問: Python-QA