ホームページ  >  記事  >  バックエンド開発  >  Python関数のパラメータの詳細な紹介

Python関数のパラメータの詳細な紹介

不言
不言転載
2018-10-09 16:33:172949ブラウズ

この記事では、Python 関数のパラメーターについて詳しく説明します。一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。

関数の定義

Python の関数は、キーワード def を使用して、次の形式で定義されます。

def 函数名(形参):
    函数语句块

関数名には、文字列、アンダースコア、および文字列のみを含めることができます。数字、数字で始めることはできません。
関数の仮パラメータは、位置パラメータ、デフォルトパラメータ(デフォルト値を持つパラメータ)、および動的パラメータに分かれています。
returnは、関数の結果を返すために使用されるキーワードです。return時

位置パラメータ

def func(a,b):
return a,b 
print(func(1,2)) #按照位置传入参数,1赋值给a,2赋值给b
print(func(a=2,b=3))#按照关键字传入参数,指定a、b的值
print(func(3,b=6))#混合传入,此时注意,位置参数要在前面
#如果不指定实参会报错,因为函数中由位置参数,则调用函数时必须传入参数
#print(func())

出力結果は次のとおりです:

    (1, 2)
    (2, 3)
    (3, 6)

リターンが書かれていない場合または、return のみが書き込まれ、後で他のコンテンツが書き込まれない場合、関数は None を返します。
return は、任意のデータ型の値を返すことができます。 return が複数の値を返す場合、それらはタプルに編成されます。つまり、複数の値が返される場合、その型はタプルになります。結果を受け取るために複数の変数を使用できますが、変数の数は返される値の数と同じである必要があります。例は次のとおりです:

def func():
    return 1,'asd',(1,'a',['hello','world']),[1,2,3]
print('直接打印结果:',func())
a,b,c,d = func() 
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)

出力:

直接打印结果: (1, 'asd', (1, 'a', ['hello', 'world']), [1, 2, 3])
a: 1
b: asd
c: (1, 'a', ['hello', 'world'])
d: [1, 2, 3]

デフォルトのパラメータ

def func(name,age=20):
    print('{}已经{}岁啦'.format(name,age))
func('刘小姐')#默认参数可以不传,这时age值为默认的20
func('刘小姐',28)#默认参数传值时则覆盖默认值
刘小姐已经20岁啦
刘小姐已经28岁啦

デフォルト値は 1 回だけ割り当てられます。これは、デフォルト値がリスト、辞書、ほとんどのクラスのインスタンスなどの変更可能なオブジェクトである場合に違いをもたらします。たとえば、次の関数は、後続の呼び出し中に (以前に) 渡されたパラメータを蓄積します。

def func(a = []):
    a.append('x')
    return a
for i in range(6):
    print(func())

ループが呼び出されるたびに、 a にパラメータが渡されませんが、 a には値が割り当てられません。空のリスト []。デフォルト値は 1 回だけ割り当てられるため、出力は次のようになります:

    ['x']
    ['x', 'x']
    ['x', 'x', 'x']
    ['x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x']
    ['x', 'x', 'x', 'x', 'x', 'x']

後続の呼び出しでデフォルト値を蓄積したくない場合は、次のように定義できます。関数:

def func(a = None):
    if a is None: #如果a是None
        a = []
    a.append('x')
    return a
for i in range(6):
    print(func())
['x']
['x']
['x']
['x']
['x']
['x']

動的パラメータ

動的パラメータは 2 つのタイプに分けられます:
1 つは *args で表され、冗長な位置パラメータを均一に受け取り、保存されます。タプルの形式です。
もう一方は **kwargs で表され、冗長なキーワード パラメータを均一に受け取り、辞書の形式で保存します。
最初に *args の例を見てみましょう

def func(a,b,c,*args):
    print('*args内容为:',args)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10))

仮パラメータは 4 つだけですが、10 を渡し、4 ~ 10 はすべて *args によって受け取られてタプルを形成します

    *args内容为: (4, 5, 6, 7, 8, 9, 10)
    55

**kwargs

def func(a,b,*args,c=20,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10,c=22,x=11,y=33,z=66))
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187
を見てみましょう

上記の例から、さまざまなタイプの仮パラメータが出現する場合、その順序は次のとおりである必要があることがわかります: 位置パラメータ、動的パラメータ args、デフォルト パラメータ、動的パラメータ *keargs

# # デフォルトのパラメータは

args の前、つまり func(a,b,c=20,args,*kwargs) であると想定されているため、パラメータが渡されると、仮パラメータ c の値が最初に実装されます。パラメータ 3 に値が割り当てられます (3 の位置が c に対応するため、デフォルト パラメータが割り当てられていない場合はその値がデフォルトとなり、割り当てられた場合はデフォルト値が上書きされます) ). この時点では c=3 ですが、後で c=20 が表示され、エラーが報告されます。仮パラメータ c が 2 回割り当てられており、これは許可されていないため、デフォルトのパラメータは args の後にランク付けされます。 ##デフォルト パラメータは

kwargs よりも前にランク付けする必要があります。これより後ろにランク付けすると、c=22 が

kwargs によって直接受信されるため、デフォルト パラメータは無意味になります。これは許可されておらず、エラーが報告されます。次は、デフォルト パラメーターを *args の前にランク付けする別の方法です。この方法でも同じ結果が得られますが、引数の位置には特に注意する必要があります。呼び出し時の c の値

さらに、デフォルト値 20 は決して使用されないため、このメソッドではデフォルトのパラメータが無意味になります。

したがって、*args の後にデフォルトのパラメータを置くのが適切です。

def func(a,b,c=20,*args,**kwargs):
    print('*args内容为:',args)
    print(c)
    print('**kwargs内容为:',kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,22,3,4,5,6,7,8,9,10,x=11,y=33,z=66))
*args内容为: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs内容为: {'x': 11, 'y': 33, 'z': 66}
187

動的パラメータを渡す簡単な方法

*args の場合、パラメータを渡すときに lis の前に * を追加し、コンテンツを直接渡すことができます

def func(*args):
    return args
lis = [1,2,{3,4,5},6,7,[8,9,0,1,23],34,5,(56,67),78,23]
print(type(lis))
print(func(*lis))
<class &#39;list&#39;>
(1, 2, {3, 4, 5}, 6, 7, [8, 9, 0, 1, 23], 34, 5, (56, 67), 78, 23)

**kwargs の場合、パラメーターを渡すときに dic の前に ** を追加し、コンテンツを直接渡すことができます

def func(**kwargs):
    return kwargs
dic = {'name':'超人','age':'500','job':'装逼'}
print(func(**dic))
{'name': '超人', 'age': '500', 'job': '装逼'}

以上がPython関数のパラメータの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。