21.1.24


<コードスタンプを復習して新しい知識をまとめる:Unit:32-33>
  • Ramda式:
    「通常、関数を他の関数として使用する引数」
    ->JavaScriptでは、関数はオブジェクトであるため、他の関数のパラメータとして使用できると聞いたことがあるようです.その原理を利用したオブジェクト指向の概念だろう.
  • def plus_ten(x):
    	return x+10
    これをramda式として以下に示す
    plus_ten = lambda x : x + 10
    すなわち「関数名=lambdaパラメータ:式」
    したがって,ラムダ式全体を括ると,(因子)を加えてすぐに実行できる.しかし、既に確立されたラムダ式に別のパラメータを加えることはできない.(単独で宣言する必要があります.)

  • ただし、コードの長さが長すぎると思う場合は、関数を直接宣言したほうがいいです.

  • パラメータとしてリストのようにシーケンスオブジェクトを受信する必要がある場合、リスト(map...)何らかのフィルタが必要な場合は、フィルタを方法として使用します.

  • reduce関数:重複可能なオブジェクト(シーケンスオブジェクト)の累積値を返す関数ですが、組み込み関数ではないので、読み込む必要があります.使用法と結果は次のとおりです.
  • >>> def f(x, y):
    ...     return x + y
    ...
    >>> a = [1, 2, 3, 4, 5]
    >>> from functools import reduce
    >>> reduce(f, a)
    15
    
    (람다)
    >>> a = [1, 2, 3, 4, 5]
    >>> from functools import reduce
    >>> reduce(lambda x, y: x + y, a)
    15
  • 文字列の位置決めと方法練習問題32
  • files = ['font', '1.png', '10.jpg', '11.gif', '2.jpg', '3.png', 'table.xslx', 'spec.docx']
    print(list(filter(lambda x : x.find('.jpg') != -1 or x.find('.png')!= -1, files)))
    解答:地図を最初に使用すると、リストとして作成されますが、分類は行われません.そのため、フィルタを使用します.
    次の単純文字列フォーマットを使用する場合、jpg、pngのアルゴリズムはすべての人が使用します.したがって,文字列法におけるfindの性質を用いる.特定の値が表示された場合は、いくつかのインデックスが検索されます.ない場合は、-1の出力プロパティが使用されます.思い出せない,長いこと考えてやっと解けた.もうしばらく解けたかもしれませんが、また方法を忘れました.
  • エンクロージャ
  • 変数の使用範囲:
  • スクリプト全体で使用可能な変数:グローバル変数
    範囲はんい:グローバル範囲グローバルはんい
    x = 10          # 전역 변수
    def foo():
        print(x)    # 전역 변수 출력
     
    foo()
    print(x)        # 전역 변수 출력
    逆に、特定の関数または特定の領域でのみ使用される変数は、領域変数です.その範囲を領域範囲と呼ぶ.
        x = 10      # foo의 지역 변수
        print(x)    # foo의 지역 변수 출력
     
    foo()
    print(x)        # 에러. foo의 지역 변수는 출력할 수 없음
    グローバル変数がある場合は、「領域変数としてのみ」として使用しますか?
    グローバル宣言は、地域変数の場所でグローバル変数を宣言することによってグローバルに使用されます.
    x = 10          # 전역 변수
    def foo():
        global x    # 전역 변수 x를 사용하겠다고 설정
        x = 20      # x는 전역 변수
        print(x)    # 전역 변수 출력
     
    foo()
    print(x)        # 전역 변수 출력
  • 関数内に関数を作成します.
  • def print_hello():
        hello = 'Hello, world!' # 함수 정의
        def print_message():
            print(hello) # 함수 정의
        print_message() # 함수 호출
     -----(지역변수 hello접근 범위)------
    print_hello() # 함수 호출
    その他の例
    def A():
        x = 10        # A의 지역 변수 x
        def B():
            x = 20    # x에 20 할당
     
        B()
        print(x)      # A의 지역 변수 x 출력
     -------(지역변수 x = 10 접근 범위)-------
    A()
    10
    A関数の領域変数の作用の範囲は10である.
    20を出したいなら?->nonlocal x
    def A():
        x = 10        # A의 지역 변수 x
        def B():
            nonlocal x    # 현재 함수의 바깥쪽에 있는 지역 변수 사용
            x = 20        # A의 지역 변수 x에 20 할당
     
        B()
        print(x)      # A의 지역 변수 x 출력
     
    A()
    20 (바깥쪽 쓰는 것으로 변경)
    しかし、実際の仕事ではそう書くことはめったにありません.異なる名前の変数を使用することを推奨します.
    これらにかかわらずglobalを使用すると、グローバル変数を無条件に使用できます.
    x = 1
    def A():
        x = 10
        def B():
            x = 20
            def C():
                global x
                x = x + 30
                print(x)
            C()
        B()
     
    A()
    31
  • 公式キャビネット
  • について
    def calc():
        a = 3
        b = 5
        def mul_add(x):
            return a * x + b    # 함수 바깥쪽에 있는 지역 변수 a, b를 사용하여 계산
        return mul_add          # mul_add 함수를 반환
     
    c = calc()
    print(c(1), c(2), c(3), c(4), c(5))
    calc()は呼び出しであり,実は関数は終了し,c(1),c(2)である.このように、領域変数、コードを保持し、呼び出し時に内部関数を再使用する概念を「モジュール」と呼ぶ.

    モジュールは、上記のcのような変数にプログラムフロー(関数形式など)を格納して、必要に応じて使用することができる.エンクロージャでは,領域変数を直接外部から法根することは困難であり,データを非表示にしたい場合に主に使用する.
    ここで2番目のdefの関数もramda式で表すことができる.
    (return lambda x:a*x+b):関数の形式
    ≪モジュール|Module|emdw≫:変数という環境が保持されていることを示す関数.
    ランダ:名前はありません.(変数などを指定しないことを示す)
    地域変数を変更したい場合(たとえば、累積式を作成します).非ローカルを使用します.
    def calc():
        a = 3
        b = 5
        total = 0
        def mul_add(x):
            nonlocal total
            total = total + a * x + b
            print(total)
        return mul_add
     
    c = calc()
    c(1)
    c(2)
    c(3)
    コンセプトを整理したアイデア:
    6~7回見て少し分かったようですまず、地域変数とグローバル変数の違い、地域範囲とグローバル範囲の違いを熟知します.
  • 概念応用練習問題32
  • def counter():
        i = 0
        def count():
          nonlocal i
          i += 1
          return i
        return count
    c = counter()
    for i in range(10):
        print(c(), end=' ')
    
    counterの変数iを非ローカルに持ち込むと、counterが呼び出されるたびに1が増加するため、+=1処理が行われる.あとはこれをそのまま回してください△印刷処理の際、counterのnonetype値も一緒に出てきたので、かなり苦労しました.