Day 9~11—総括関数

9397 ワード

関数#カンスウ#
1、関数とは
ある特定の機能を実現するコードブロックのパッケージである
2、関数の分類
システム関数(内蔵関数)-システムが実装した関数(作成したマシン)、呼び出すだけでprint関数input関数len関数sum関数max関数など
カスタム関数かすたむかんすう:プログラマが自分で宣言した関数(自分でマシンを作成)プログラマが自分で宣言した関数
3、関数の宣言(定義)
1)構文def関数名(パラメータリスト):「」「関数説明ドキュメント」「」関数体
2)def-python宣言関数を説明するキーワード関数名-変数名と同様に名前を見て、関数名が何に使われているかを大体知っています()--固定書き方パラメータリスト-変数1、変数2、変数3・・・変数名の個数は0個以上であり、関数の外の値を関数に渡す:--固定書き方関数体--defと1つのインデントを維持し、関数機能を実現する1つまたは複数の文
3)初心者が関数を宣言するステップ一、関数を決定する機能二、機能によって関数名三、形参を決定する.関数を実現する機能は外から値を伝達する必要があるかどうか、もし値を伝達する必要があるならばいくつか四、関数機能を実現する五、戻り値を確定する
!!!!!)注:関数は宣言されたときに実行されません.
練習:1つの関数を書いて2つの数と
#           
def t_sum(x, y):
    """
          (    )
    :param x:  (    )
    :param y:
    :return:    (     )
    """
    print('  ')
    print(x+y)

练习:1+2+3+を求める関数を宣言します...n
#           1+2+3+。。。n
def sum1(n):
    """
     1+2+3+。。。n
    :param x:
    :return:
    """
    i = 0
    for x in range(n+1):
        i += x
    print(i)

sum1(10)

4、関数の呼び出し使用
1)構文:関数名(実相リスト)
2)説明関数名——すでに宣言された関数()でなければならない——固定書き方実参リスト——データ1,データ2・・・形参に値を与える
同じ関数を複数回呼び出すことができます
3)関数の呼び出し手順(重要*****)
一、関数宣言の位置に戻る二、実パラメータでパラメータに値を与える(パラメータ伝達)各パラメータに値があることを保証する三、関数体四を実行する、戻り値5を取得する、関数呼び出しの位置に戻る、その後実行する
関数のパラメータ
1、位置パラメータ、キーワードパラメータ
関数を呼び出すときは実参の書き方によって位置パラメータ、キーワードパラメータに分けられます
  • 位置パラメータ:実パラメータの順序を形パラメータに1つずつ対応させ、カンマで
  • を区切る
  • キーワードパラメータ:「パラメータ名1=値1、パラメータ名2=値2・・」形式で実パラメータ
  • を決定する
  • 位置パラメータ+キーワードパラメータ:位置パラメータはキーワードパラメータの前の
  • に書く必要があります.
    2、パラメータのデフォルト
    関数を宣言するときは、デフォルト値とデフォルト値を持つパラメータをパラメータ呼び出し時に割り当てることができます.パラメータに値を割り当てる必要はありません.注意:宣言するときは、デフォルト値のあるパラメータを最後に置く必要があります.デフォルト値のあるパラメータをスキップするときは、キーパラメータを使用する必要があります.
    def func2(a, b=12, c=19):
        print(a, b, c)
    
    #       a c  ,b     
    
    func2(13, c=23)
    

    3、パラメータの種類説明
    pythonのタイプは説明の役割のみで、制約の役割はありません.2つの方法があります:1)パラメータにデフォルト値を割り当てる2)パラメータ名:タイプ
    4、不定長パラメータ-パラメータのパラメータ不確定
  • 関数を宣言するとき、パラメータの前に*星を付けると、このパラメータは不定長パラメータになり、同時に複数の実パラメータ(このパラメータを元祖にする)を受信するには、位置実パラメータ
  • を使用する必要があります.
  • 関数を宣言するとき、パラメータの前に**の2つの星を付けると、このパラメータも不定長パラメータになります.同時に、複数の実パラメータ(このパラメータを辞書に変更)を受信するには、キーワード実パラメータを使用する必要があります.キーワードはkey
  • です.
    注意:定長パラメータは、不定長パラメータの前にアスタリスクを持たないパラメータをアスタリスクパラメータの前に置く必要があります.
    練習:練習:関数を書き、指定された方法で複数の数値を計算した結果operation('+','23','24')——>23+24 operation('-','23','24')
    def operation(ex, *a):
        if ex == '+':
            num1 = 0
            for x in range(len(a)):
                num1 += x
            print(num1)
        elif ex == '*':
            num1 = 1
            for x in range(len(a)):
                num1 *= x
    

    練習:1つの関数を書いて複数の数の和を求めて位置のパラメータを使うことができて、またキーワードのパラメータを使うことができます
    def func1(*args, **kwargs):
        """
              
        :param args:                
        :param kwargs:               
        :return:
        """
        sum1 = 0
        print(sum(args))
        for key in kwargs:
            sum1 += kwargs[key]
        print(sum1 + sum(args))
    
    func1(2, 3, 4, a=2, b=3, c=4)
    

    関数の戻り値
    1、関数の戻り値とは
    戻り値はreturnキーワードの後の式の値であり、関数呼び出し式の値である.
    return関数体のキーワードは関数体にのみ表示されます
    機能:
  • 終了関数
  • は、関数の戻り値
  • を決定する.
    呼び出し関数:関数ボディを実行して戻り値を取得する
    関数呼び出しプロセス:重要1、関数宣言の位置に戻る2、実パラメータでパラメータに値を割り当てる(パラメータ伝達)各パラメータに値があることを保証する3、関数体4を実行し、戻り値を取得して関数体を実行する:関数体の実行が完了し、実行中にreturnに遭遇して関数の戻り値を決定する:関数を実行する過程でreturnに遭遇したかどうか、遭遇した場合、return後式の値は関数の戻り値がreturnに遭遇していないことであり、関数の戻り値はNone 5であり、関数呼び出しの位置に戻り、その後実行する(このとき関数呼び出し式の値は関数の戻り値である)
    2、いつ値を返す必要があるか
    関数の機能を実現すると、新しいデータが生成され、このデータを戻り値return戻り値1、戻り値2とする
    匿名関数
    匿名関数とは
    匿名関数は名前のない関数です
    1)構文:lambdaパラメータリスト:戻り値
    2)説明lambda-キーワードパラメータリスト-一般関数パラメータリストに相当:-固定書き方戻り値-一般関数関数関数体に相当するreturnは付与文ではない.
    注意:
  • 匿名関数の本質はやはり関数であり、関数の文法のほとんどは適用される
  • である.
  • 匿名関数でできることは、普通の関数でもできます.匿名関数のみ簡潔
  • は、タイプ名によるパラメータタイプの説明
  • をサポートしていない.
    練習:匿名関数は2つの数の和を求めます
    #           function  
    fun1 = lambda a, b=1: a+b
    
    print(fun1(1, 2))
    print(fun1(a=1, b=2))
    print(fun1(1))
    

    関数の変数
    1.変数の役割ドメイン
    変数の使用範囲グローバル変数、ローカル変数を指します
    2.グローバル変数
    関数に宣言されていない変数がグローバル変数である場合のグローバル変数の役割ドメインは、変数宣言からpyファイル全体の終了までです.
    3.ローカル変数
    関数内の変数がすべてローカル変数であることを宣言する役割ドメインは、変数宣言から関数終了までの注意です.パラメータもローカル変数です.
    関数を呼び出すと、システムは自動的にメモリのスタック区間でこの関数のために独立したメモリ領域を開き、関数で宣言された変数または生成されたデータを保存します.関数呼び出しが終了すると、このメモリ領域は自動的に破棄されます.
    4.globalとnonlocal
    global-関数でグローバル変数を宣言するには、関数でglobal変数名変数名=値のみを使用します.
    nonlocal-ローカル変数の値をローカルで変更nonlocalローカル変数名ローカル変数名=値
    x1 = 100
    
    
    def func4():
        # x1 = 200    x1     
        global x1  #      x1       
        x1 = 200
        print('   ', x1)
    
    
    func4()
    print('   ', x1)
    
    print('0-------------')
    
    
    def func5():
        x2 = 100
    
        def func6():
            # x2 = 200
            nonlocal x2
            x2 = 200
            print('  5   6 ', x2)
        func6()
    
        print('  5 ', x2)
    
    
    func5()
    

    変数としての関数
    1.変数として関数
    pythonで宣言する関数は、functionのタイプを宣言する変数関数名が変数名であることを意味します.
    だから普通の変数でできることは関数でもできます
    2.ある変数は別の変数に値を割り当てることができる
    def func1():
        return 100
    
    c = func1
    c()
    print(c())
    
    func1 = 12.5
    print(func1)
    

    3.1つの変数が1つのコンテナの要素として使用できる
    a = 10            #      ,     
    print(type(a))
    
    #       ,   function
    def func2():
        print('    2')
        return 100
    
    print(type(func2))
    list1 = [a, func2, func2()]
    print(list1)
    print('0:', list1[0] // 3)
    print('1:', list1[1]())    # print('1:', func2())  -> print('1:', 100)
    

    練習:
    list2 = []
    for i in range(5):
        def func(n):
            return i * 2
        list2.append(func)
    
    
    list3 = []
    for i in range(5):
        list3.append(lambda x: x*i)
    
    
    print(list3[0](2), list3[1](2), list3[2](2))
    """
    list2 = []
    i = 0 ~ 4
    i = 0:  func, list2 = [func]
    i = 1:  func, list2 = [func, func]
    ...
    i = 4: list2 = [func,func,func,func,func]
    """
    # list2[0](3), list2[1](3), list2[2](3)
    # func, func, func
    # None, None, None
    # 0, 2, 3
    # 8, 8, 8
    print(list2)
    print(list2[0](3), list2[1](3), list2[2](3))
    

    4.変数は関数のパラメータとすることができる
    関数を関数とするパラメータ(実パラメトリック高次関数)
    def func1(fn, fn2):
        # fn = func11
        # fn2 = func12
        fn()   # func11(),  None
        print(fn2(3) / 4)  # print(9/4)
    
    
    def func11():
        print('      ')
    
    
    def func12(n):
        # n = 3
        return n**2
    
    
    print(func1(func11, func12))   # print(None)
    

    適用:sort関数(ソート)sort関数
    nums = [1, 23, 34, 32, 12]
    nums.sort()      #       
    print(nums)
    

    シーケンスsort関数にはパラメータkeyがあり、このパラメータは関数を渡す必要があり、関数にはパラメータと戻り値パラメータがシーケンスの要素であり、戻り値はソート比較の対象である.
    all_stu = [
        {'name': 'dd', 'age': 12, 'score': 32},
        {'name': 'ad', 'age': 15, 'score': 41},
        {'name': 'sd', 'age': 13, 'score': 36},
        {'name': 'cd', 'age': 11, 'score': 72}
    ]
    
    def compare(item):
        return item['age']
    
    
    all_stu.sort(key=compare)
    all_stu.sort(key=lambda item: item['age'])
    print(all_stu)
    
    all_message = [
        (' ', 'python1902001'),
        (' ', 'python1902108'),
        (' ', 'python1902046')
    ]
    
    all_message.sort(key=lambda item: item[1], reverse=True)
    print(all_message)
    
    all_message.sort(key=lambda item: item[1][-1])
    print(all_message)
    

    5.変数を関数として返す値
    関数の戻り値として関数を使用します(戻り値の高次関数)
    def func1():
    
        def temp(*nums):
            return sum(nums)
        return temp
    
    
    print(func1()(1, 2, 3, 4))
    

    反復器(iter)
    1.反復器(iter)とは
    コンテナ型データ型(複数のデータを同時に格納可能)ですが、反復器の要素の値を取得、表示するには要素を取り出すしかありません.取り出した要素は反復器には存在しません.
    2.反復器の要素
    反復器は、タイプ変換によって他のコンテナを反復器に変換するか、ジェネレータによって変換を生成します.すべてのシーケンスを反復器に変換できます.反復器の要素は任意のタイプのデータであってもよい
    3.要素の取得-
    反復器は要素を取得し、どのような方法で取得しても、この要素は反復器には存在しません.
  • next(反復器)-反復器の最上位データを取得する
  • 各要素
  • を巡回取得する.
     # 1) next(   )  -           
    
    iter2 = iter('hello')
    print(next(iter2))
    print(next(iter2))
    print(next(iter2))
    print(next(iter2))
    print(next(iter2))
    # print(next(iter2))     # StopIteration
    
    # 2)          
    
    iter3 = iter('hello')
    for x in iter3:
        print(x)
    

    ビルダー
    1.ジェネレータとは
    ジェネレータの本質は反復器であり、反復器は必ずしもジェネレータがyieldキーワードを持つ関数を呼び出すことでジェネレータを得るとは限らない.yieldは関数体にしかありません
    def func1():
        print('--')
        return 100
        yield
    
    
    gen1 = func1()
    print(gen1)
    

    2.ジェネレータの要素
    ジェネレータが要素を取得する方法は反復器と同じnext()と遍歴
  • ジェネレータ要素の個数:ジェネレータ対応の関数を実行すると何回yield
  • に遭遇するかを見てください.
  • 要素の値:yieldを見た後の式の値

  • 3.ジェネレータがデータを生成する原理
    ジェネレータの要素を取得すると、ジェネレータに対応する関数が実行され、最初からyieldまで実行され、yieldの後ろのデータが要素として返されて終了位置が記録され、次に要素を取得すると、前回の終了位置からyieldに遭遇するまで実行され、yieldの後ろのデータが要素として返されます.関数が最初から最後までyieldに遭遇しなかった場合、要素は取得されません.nextがエラーforループが終了します
    def func2():
        print('===')
        yield 200
    
    
    gen3 = func2()
    print(next(gen3))
    

    せいせいしき
    本質はやはりジェネレータは書き方が簡潔だ
    書き方:文法1.(式for変数inシーケンス)
    展開def func():for変数inシーケンス:yield式func()
    ()-固定書き方式-データ、変数、演算式、関数呼び出し式などの付与以外の文は、一般にfor in-forループに関連付けられています.
    文法2.(式for変数inシーケンスif条件文)
    展開def func():for変数inシーケンス:if条件文:yield式