pythonノート19_関数パラメータ


主な内容:
  • 小ターゲット:関数パラメータと呼び出し
  • を完了する
  • 主な内容:関数パラメータ、関数呼び出し
  • この文章を読み終わったら、関数パラメータがまだ分かりません.あなたは私を探しに来て、私はあなたを打たないことを保証して、私はあなたに100のお年玉をあげます.
    1.関数定義
    前の文章では、関数を紹介しましたが、今回は詳しく紹介します.
    1.1関数の定義:
    def funcname(args):
        pass
  • 関数呼び出し:関数名+()、例えばfunc()
  • 関数定義キー:def、関数名、関数パラメータ;
  • 関数デフォルト戻り値None,
  • 加算戻り値を表示return
  • を使用
    1.2関数命名規則:
    従う:可読性がよく、関数名で関数機能を理解することができる.
  • 共通関数命名仕様:
  • 各単語の頭文字は大文字で、例えばGetValueByID
  • 頭文字小文字、残りの各単語頭文字大文字:getValueById
  • 単語と下線の組み合わせ、例えばget_value_by_id


  • 具体的な命名規則は会社の規定に従うことができる.
    2.関数の役割:
  • パッケージ、モジュール化
  • コード多重
  • 3.関数パラメータと呼び出し
    関数はパラメータを持ってもよいし、パラメータを持っていなくてもよい.パラメータ関数によって呼び出し方が異なります.
    3.1無パラメトリック関数と呼び出し
  • パラメータなし関数:関数定義時にパラメータがありません.
  • 適用シーン:タイムスタンプの生成、乱数の生成など
  • 例:0~10000間の乱数
    import random
    #gerRandom():    
    def getRandom():
        return random.randint(0,10000)
  • 呼び出しプロシージャ:関数名+()
    import random
    #gerRandom():    
    def getRandom():
        return random.randint(0,10000)
    print(getRandom())
    結果:9744
  • 3.2パラメータ付き関数
    一般的には、関数にパラメータを加えた除算関数です.
    #    ,x,y    
    def myDiv(x, y):
            return x/y

    x,yを形参と呼ぶ
  • 関数呼び出し:直接例:
    #    ,x,y    
    def myDiv(x, y):
        return x/y
    print(myDiv(10,2))
    結果:5.0
  • 関数呼び出しの注意点:
    1.パラメータの整合性、パラメータの数と関数の定義は常に2.付与順序:前後順に順次付与、x=10、y=2

  • 3.3デフォルトパラメータ付き関数
  • 関数定義、パラメータにデフォルト値を追加します.例:
    #y    1
    def mydiv(x, y=1):
        return x/y
  • 注意点:デフォルト値パラメータ付きで、デフォルト値なしの後に置かなければならないエラー定義方法:
    def mydiv(y=1,x):
        return x/y
    エラー:
    SyntaxError: non-default argument follows default argument
  • 関数呼び出し:
    def mydiv(x, y=1):
        return x/y
    #x=2,y     1
    print(mydiv(2))
    #x=2,y=2,y=1  
    print(mydiv(2,2))
    結果:2.0,1.0
  • 3.4関数呼び出し:キーワードパラメータ使用
  • 関数パラメータは比較的多く、順序エラーを避けるために、関数を呼び出す際にキーワードパラメータを使用することができる:一例:
    def myDiv(x,y):
        return x/y
    #       
    print(myDiv(2,1))
    #     
    print(myDiv(y=10,x=2))
    #y       
    print(myDiv(5,y=2))
    結果:
    2.0
    0.2
    2.5
  • エラーの使用方法:
    #    ,          ,
    myDiv(y = 5,2)
    myDiv(x=5, 2)
    #      ,          x,    
    myDic(2,x=4)
    以上が関数の基本定義と呼び出し
  • である.
    4.可変長パラメータ
    いくつかの関数とメソッドでは、次の方法で関数を定義します.
    def myfunc(x, *args, **kwargs): pass

    質問:*args、*kwargsはそれぞれ何ですか?
    4.1可変長非キーワードパラメータ
  • *args:関数の可変長非キーワードパラメータ
  • 直接例を見てみましょう:和を求める関数:
    def mySum(x,y):
            return x+y
    print(mySum(1,2))

    結果:3
    需要:mySumは複数の数値と、例えば2個の数、3個の数、N個の数を計算して、どのように実現しますか?*argsパラメータを使用してmySum関数を再定義できます.
    def mySum(x,y,*args):
            return x+y+sum(args)
    #   2   
    print(mySum(1,2))
    #    
    print(mySum(1,2,3))
    #5   
    print(mySum(1,2,3,4,5))

    結果:
    3
    6
    15
  • コード分析:
    mySumにおける*argsの役割:可変長非キーワードパラメータを表す;mySum(1,2,3,4,5)呼び出しでは,パラメータ処理手順は以下の通りである.x =1, y =2;他のパラメータは*args処理により、3,4,5を1つのメタグループに収集する.

  • 検証:
    def mySum(x,y,*args):
        #  args    
        print('*args:', args, type(args))
        return x+y+sum(args)
    #  
    mySum(1,2)
    mySum(1,2,3,4)

    結果:
    *args: () 
    *args: (3, 4) 

    出力結果から次のように表示されます.
    *argsは1つのメタグループsum(args)で、メタグループに対して和を求めます
    4.2関数呼び出しでmySum(1,2,args)のargsとはどういう意味ですか?
    まず例を見てみましょう.
    values = [1,2,3]
    mySum(10,20, *values)
  • 質問:*valuesとはどういう意味ですか.
    関数呼び出しでmySum(10,20,*values)の*valuesは、valuesを分散して数値にし、新しいメタグループに再収集するプロセスです.

  • ケース:
    def mySum(x,y,*args):
        print('*args:', args, type(args))
        return x+y+sum(args)
    v1 = (3,4)
    v2 = [5,6]
    #*v1: (3,4)->3,4,  :mysum(1,2,4,5)
    print(mySum(1,2, *v1))
    #*v2: [5,6]->5,6,  :mysum(1,2,5,6)
    print(mySum(1,2, *v2))

    結果:
    *args: (3, 4) 
    10
    *args: (5, 6) 
    14

    4.3可変長キーワードパラメータ
    可変長キーワードパラメータは、マルチ条件クエリーなど、シーンが比較的多い.
    例:
    def func(x,y,**kwargs):pass

    質問:**kwargsってどういう意味ですか?可変長キーワードパラメータ、比較*args理解;
    関数を呼び出すと、入力されたキーワードパラメータの数が不定で、使用する必要があります:**kwargs;例:
    def myfunc(sid, name, **kwargs):
        print(kwargs, type(kwargs))
    #math,chinese->{math:100,chinese:80}
    myfunc(1,'sun', math=100,chinese=80)
    #math->{math:70}
    myfunc(2,'li', math=70)

    結果:
    {'math': 100, 'chinese': 80} 
    {'math': 70} 

    次のように表示されます.
    kwargsは辞書:**kwargs:math,chineseおよび対応する値を辞書に整理します.
    4.4関数呼び出し中:**kwargsどういう意味ですか?
    例を直接見ます.
    def myfunc(sid, name, **kwargs):
        print(kwargs, type(kwargs))
        #  kwargs   
        print(kwargs.get('chinese'))
    
    info = {'chinese':90}
    #**info -> chinese=90
    myfunc(1,'sun',**info)
    #       
    myfunc(1,'sun',info)

    結果:
    {'chinese': 90} 
    90
    TypeError: myfunc() takes 2 positional arguments but 3 were given

    関数呼び出しでmyfunc(1,'sun',**info)解析:
    **infoはinfoをばらばらにして、簡単にキーワードパラメータになるように理解します:chinese=90 myfuncそれを辞書kwargsに再整理します
    ここでは,可変長パラメータと呼び出しプロセスについてある程度理解した.
    4.5関数定義パラメータ順序:
    エラーを回避するには、次のようにします.
    def func(  ,*args,       ,**kwargs):pass

    例1:
    def func(x, y, *args, z=10, **kwargs):
        print(x,y,args, z, kwargs)
    func(1,2,4,5,19, z = 20)
    func(1,2,4,5,19, z = 20,t=10)

    結果:
    1 2 (4, 5, 19) 20 {}
    1 2 (4, 5, 19) 20 {'t': 10}

    例2:
    def func(x, y, z=10, *args, **kwargs):
        print(x,y,args, z, kwargs)
    func(1,2,4,5,19)
    #z       ,   :z=4, z=20  ,     
    func(1,2,4,5,19, z = 20,t=10)

    結果:
    1 2 (5, 19) 4 {}
    TypeError: func() got multiple values for argument 'z'

    まとめ:
  • 関数定義注意パラメータ:パラメータなし、パラメータなし、デフォルト値パラメータ付き、可変長パラメータ;
  • 関数呼び出し:呼び出し元の入力パラメータは関数定義と一致し、Python関数構文規則に従う.