Pythonはそれが何であるかを*引数と** kwargsからでしょうか?どのように使用するには?

 

出典:Pexels

 

プログラミングでは、関数が命です!

 

それはプログラミングに新しいものであるか、または別の言語に精通している方 - - 初心者としてPythonを使用して関数定義内のパラメータの数が、引数の数と一致し、伝えたいかを学ぶためのすべての必要性を。

これは、知識の基礎である - 世界を理解するのに役立ちます。

 

しかし、関数定義へのアクセス*引数と** kwargsからは、初心者には心理的な障壁に遭遇し始めることができます。

 

Pythonのコードでは、多くの場合、我々は二つの言葉引数とkwargsからは、一般的に1つのまたは2つのアスタリスクの前に追加されます参照してください。

 

これらの記述につまずくことがないようにしてください。実際には、これらは何もスーパー特別なパラメータではありません、それは不思議ではないですが、プログラマは変数名を合意し、引数は位置パラメータを示し、略語の引数であり、kwargsからはキーワード引数の略で、キーワード引数を表明しました。

 

これは実際には、*引数と** kwargsからはキーワード引数で前方位置パラメータので、目の前に配置する必要があり、Pythonの変数パラメータの二つの形式です。

 

次に、我々は、具体的にそれらを使用する方法を学習します。

 

キーワード引数対位置パラメータ

 

*引数と** kwargsからは何かを学ぶために、私たちは二つの概念を区別する必要があります。

 

まず、位置パラメータとキーワードパラメータの違いを区別します。パラメータ1、パラメータマッチング、パラメータとパラメータ2 2試合、というように - その最も基本的な機能では、マッチングゲームを作ります。

 

def printThese(a,b,c):   print(a, "is stored in a")   print(b, "is stored in b")   print(c, "is stored inc")printThese(1,2,3)"""1 is stored in a2 is stored in b3 is stored in c"""

 

三つのパラメータが必要とされている、の欠如は、故障の原因となります。

 

def printThese(a,b,c):   print(a, "is stored in a")   print(b, "is stored in b")   print(c, "is stored inc")printThese(1,2)"""TypeError: printThese() missing 1 required positional argument: 'c'"""

 

パラメータのデフォルト値は、このパラメータはオプションとなり、関数定義を与えています。

 

def printThese(a,b,c=None):   print(a, "is stored in a")   print(b, "is stored in b")   print(c, "is stored inc")printThese(1,2)"""1 is stored in a2 is stored in bNone is stored in c"""

 

また、これらのオプションのパラメータは、キーワードの選択は、あなたが今、関数名とそれに対応するマップを指定されたパラメータを呼び出すことができるでしょう。

 

三つの変数のデフォルト値はNoneに設定し、状況マップを考慮せずにどのように順序を確認しています。

 

 

defprintThese(a=None,b=None,c=None):   print(a, "is stored in a")   print(b, "is stored in b")   print(c, "is stored inc")printThese(c=3, a=1)"""def printThese(a=None,b=None,c=None):   print(a, "is stored in a")   print(b, "is stored in b")   print(c, "is stored inc")printThese(c=3, a=1)"""1 is stored in aNone is stored in b3 is stored in c"""

 

スプラットオペレータ

 

出典:Pexels

 

私が開始するオペレータの名前を愛していると言うために最初から - あまりにも......可視化しました。*乗算は、多くの場合に関連しますが、Pythonで、二回スプラットオペレータです。

 

この演算子は箱のようなものです。オペレータが伸びる - スプラット相当JavaScript--プロセスをより大きな配列を形成する、ドミノオープンとして見られるが、必要より強力な類似のスプラットすることができます。

 

利用以下例子更容易解释清楚。

a = [1,2,3]b = [*a,4,5,6]print(b) # [1,2,3,4,5,6]

 

在代码实例中,将a的内容移入(解包)到新列表b中。

 

如何使用*args和**kwargs

 

我们知道splat运算符解包多个值,并且知道函数参数有两种类型。若现在还未弄明白,那么可以将*args理解为变元的缩写,而**kwargs理解为关键字变元的缩写。

 

各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。例如,创建一个函数表示学生的考试分数。

def printScores(student,*scores):   print(f"Student Name:{student}")   for score in scores:     print(score)printScores("Jonathan",100, 95, 88, 92, 99)"""Student Name: Jonathan10095889299"""

 

噢,等等,我并未称呼其为*args?是的,“args”是一个标准化规范,但仍然只是一个名称。事实上,在*args中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后)。

 

这些理清楚之后,**kwargs就很容易理解了。名称并不重要,重要的是双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。

 

为了更好地演示,我们创建一个函数,输出参加全国英语等级考试的人员名单。

def printPetNames(owner,**pets):   print(f"Owner Name:{owner}")   for pet,name in pets.items():      print(f"{pet}:{name}")printPetNames("Jonathan", dog="Brock",fish=["Larry", "Curly", "Moe"],turtle="Shelldon")"""Owner Name: Jonathandog: Brockfish: ['Larry', 'Curly', 'Moe']turtle: Shelldon"""

 

来源:Pexels

 

最后,再给大家提供一些额外的“知识福利”。

 

下面一些谏言可有助于大家规避常见的陷阱并扩展知识面。

 

·       利用*args和**kwargs作为标准化规范,把握好位置参数和关键字参数;

·       不能将**kwargs置于*args前,否则将产生错误;

·       清楚意识到关键字参数和**kwargs之间的冲突,该值本是传达**kwarg的意思,但是却不明就里的成为关键字参数的名称;

·       在函数调用时可以采用splat运算符。

发布了65 篇原创文章 · 获赞 0 · 访问量 561

おすすめ

転載: blog.csdn.net/weixin_46089319/article/details/104004259