Python入門(四)-関数の概要、パラメータ、可変パラメータ、キーワードパラメータ、組合せパラメータ、再帰関数


Python入門(四)-関数の概要、パラメータ、可変パラメータ、キーワードパラメータ、組合せパラメータ、再帰関数
ハロー、皆さん、pythonの勉強を続けましょう.
一.関数の概要
関数、方法ですか、実は私たちの前にすでに接触したことがあって、コードを見てみましょう
#   
print len(["xx", "yy"])

#    
print abs(-2)

このコードでは、このlen()とabs()が関数です.
興味深いことに、関数は値を割り当てることができます.
a = abs

print a(-2)

これもいいです
二.関数パラメータ
では、関数をどのように定義するかを使用します.
Pythonでdef文を使用する関数を定義し、関数名、かっこ、かっこのパラメータとコロンを順に書き出します.次に、インデントブロックに関数体を記述し、関数の戻り値をreturn文で返します.
コードを見てみましょう
#    
def isBig(x, y):
    if x > y:
        return x
    else:
        return y


print isBig(3,2)

このコードはとても简単で、私达はdefで1つの方法の名前をisBigと定义して、中はパラメータx,yを伝える必要があって、どれが大きいかを判断してどれを返して、更に出力して、结果は3を出して、このように方法を定义しました
ここで注意してください
return文がない場合、関数の実行が完了すると結果も返されますが、結果はNoneです.
return Noneはreturnと略記できます.
ここでもう一つの概念は空の関数です
def nop():
    pass

pass文は何もしないで、それは何の役に立ちますか?実際にpassはプレースホルダとして使用できます.例えば、関数の書き方をまだ考えていないコードは、まずpassを置いて、コードを実行させることができます.
これはjavaとは違って、何もしないと文法が間違ってしまいます.
もう一つの小さな知識点は、複数の値を返すことができることです.コードを見てみましょう.
z = 10

#     
def isBig(x, y):
    if x > y:
        return x, z
    else:
        return y, z

a, b = isBig(3, 2)

print a
print b

このコードはよく理解できます
私は1つの方法を定義して、どうせあなたはどのように操作して、私はすべて2つの値を返して、更に受信して、それぞれ印刷します
三.可変パラメータ
もう一つの概念はデフォルト値ですが、なぜそう言いますか?簡単な例を見てみましょう
def power(x):
    return x * x

この関数はxの二次方程式を計算していますが、私は今三次方程式を計算したいですか?どうやって変更できますか?
def power(x):
    return x * x * x

しかし、これで4回、5回、毎回関数の内容を変更しなければならないので、抽出することができます.
def power(x,n):
    return x * x * x * n

これでいいですが、これでは、以前に呼び出されたメソッドを変更する必要があります.ここではデフォルト値を与えることができます.
def power(x,n = 2):
    return x * x * x * n

print power(5)
print power(5,3)

すべて可能
上記の例から、デフォルトパラメータは関数の呼び出しを簡略化できることがわかります.デフォルトのパラメータを設定する際には、次の点に注意してください.
1つは必須パラメータが前で、デフォルトパラメータが後で、そうでなければPythonの解釈器が間違っています(なぜデフォルトパラメータが必須パラメータの前に置けないのか考えてみましょう).
2つ目は、デフォルトパラメータを設定する方法です.
関数に複数のパラメータがある場合は、変化の大きいパラメータを前に、変化の小さいパラメータを後ろに置きます.変化の小さいパラメータはデフォルトのパラメータとして使用できます.
デフォルトのパラメータを使用するメリットは何ですか?最大の利点は、呼び出し関数の難易度を低減できることです.
例を見てみましょう
def login(name,sex):
    print "name:",name
    print "sex:",sex

login("  ",18)

このコードはログインの過程で、名前と年齢が必要であることがわかりますが、私たちがまだ追加しなければならないなら、そうですか?
def login(name,sex, gender,address):
    print "name:",name
    print "sex:",sex
    print "gender:",gender
    print "address:",address

login("  ",18," ","  -  ")

しかし、もしあなたがあるシーン、例えば北京のある小学校であれば、私たちのデフォルト値は役に立ちます.
def login(name,sex, gender,address = "  -  "):
    print "name:",name
    print "sex:",sex
    print "gender:",gender
    print "address:",address

login("  ",18," ")

Python関数では、可変パラメータを定義することもできます.その名の通り、可変パラメータは、入力されたパラメータの個数が可変であり、1個、2個から任意個であってもよく、0個であってもよい.
これは、ある変数の前に*を追加することです.コードを見てみましょう.

def login(*number):
    for numbers in number:
        return numbers

print login(1,2,3)

関数ここの知識点は比較的に多くて、みんなは辛抱強くして、これは重点です
四.キーワードパラメータ
もう一つの知識点は、キーワードです.まずコードを見てみましょう.
def person(name, age, **ab):
    print name, age, ab


person("  ", 5)

#      
# person("  ",5,"  ")

person("  ", 5, ab="  ")

このコードでは、固定された2つのパラメータname、ag、可変パラメータabが定義されています.次の呼び出しを見て、意味がわかります.
キーワードパラメータは何に使いますか?関数の機能を拡張できます.たとえば、person関数では、nameとageの2つのパラメータを受信できることを保証しますが、呼び出し者がより多くのパラメータを提供したい場合は、受信できます.ユーザー名と年齢が必須である以外はオプションで、キーワードパラメータを利用してこの関数を定義すれば登録のニーズを満たすことができます.
五.コンビネーションパラメータ
Pythonで関数を定義するには、必須パラメータ、デフォルトパラメータ、可変パラメータ、キーワードパラメータの4つのパラメータを一緒に使用するか、一部のみ使用できますが、パラメータ定義の順序は、必須パラメータ、デフォルトパラメータ、可変パラメータ、キーワードパラメータでなければなりません.
たとえば、上記の4つのパラメータを含む関数を定義します.
def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw

私たちはこのように使用することができます.
args = (1, 2, 3, 4)

kw = {'k': 99}


def func(a, b, c=0, *args, **kw):
    print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw


print func(1, 2)
print func(1, 2, c=3)
print func(1, 2, 3, 'a', 'b')
print func(1, 2, 3, 'a', 'b', x=5)

print func(*args, **kw)

このコードを通じてみんなが関数の作用をよく知っていると信じて、変化が多すぎて、とても不思議です
したがって、パラメータがどのように定義されているかにかかわらず、任意の関数についてfunc(*args、**kw)のような形式で呼び出すことができます.
小結
Pythonの関数は非常に柔軟なパラメータ形態を持ち,簡単な呼び出しを実現するとともに,非常に複雑なパラメータを伝達することができる.
デフォルトのパラメータは必ず可変オブジェクトを使用します.可変オブジェクトの場合、実行中に論理エラーが発生します.
可変パラメータとキーワードパラメータを定義する構文に注意してください.
*argsは可変パラメータであり、argsはtupleを受信する.
**kwはキーワードパラメータであり、kwはdictを受信する.
関数を呼び出すときに、可変パラメータとキーワードパラメータの構文を入力する方法を示します.
可変パラメータは直接入力できます:func(1,2,3)、listまたはtupleを組み立ててからargsを介して入力できます:func((1,2,3);
キーワードパラメータは、func(a=1,b=2)を直接入力することもできるし、dictを組み立ててからkwを介してfunc({‘a’:1,‘b’:2})を入力することもできる.
*argsや*kwを使うのはPythonの習慣的な書き方で、もちろん他のパラメータ名も使えますが、習慣的な使い方が望ましいです.
六.さいきかんすう
関数の内部で、他の関数を呼び出すことができます.関数が内部で自身を呼び出す場合、この関数は再帰関数です.
def func(x):
    if x == 1:
        print "  "
    else:
        print "  "
        return func(x - 1)

func(10)

この段落は再帰関数で、私は10に入って、もし彼が1でなければ、運行を減らし続けて、得た結論は:
再帰関数の利点は定義が簡単で、論理がはっきりしていることです.理論的には,すべての再帰関数はループの方式と書くことができるが,ループの論理は再帰的にはっきりしていない.
再帰関数を使用するには、スタックオーバーフローの防止に注意する必要があります.コンピュータでは、関数呼び出しはスタック(stack)というデータ構造によって実現され、1つの関数呼び出しに入るたびにスタックにスタックフレームが追加され、関数が戻るたびにスタックフレームが減少する.スタックのサイズは無限ではないため、再帰呼び出しの回数が多すぎると、スタックがオーバーフローします.
この方法を1000回呼び出してみてください
RuntimeError: maximum recursion depth exceeded

最後の再帰を使用して最適化
最後の再帰呼び出しの場合、最適化を行った場合、スタックは増加しないため、何度呼び出してもスタックオーバーフローは発生しません.
残念なことに、多くのプログラミング言語はテール再帰に対して最適化されておらず、Python解釈器も最適化されていないため、上記の関数をテール再帰方式に変更してもスタックオーバーフローを招く
小結
再帰関数を使用する利点は、論理が単純で明確であることであり、深すぎる呼び出しがスタックオーバーフローを引き起こすという欠点がある.
テール再帰最適化のための言語は、テール再帰によってスタックオーバーフローを防止することができる.テール再帰は事実上ループと等価であり,ループ文のないプログラミング言語はテール再帰によってループを実現するしかない.
Python標準の解釈器はテール再帰を最適化せず,どの再帰関数にもスタックオーバーフローの問題がある.
では、関数はここまでにしましょう.
Android旅行の道のり:484167109
もちろん、私の微信の公衆番号にも注目してください.