まず、無名関数
1.無名関数
機能だけでなく、ラムダ宣言された関数を宣言するのpython defのキーワードの使用に加えて、このような機能は、匿名関数と呼ばれています。
匿名関数へ2.単純な関数
匿名関数の構文:ラムダの引数:式
#0パラメータ #単純な関数は匿名関数とすることができる DEF :テスト() の戻り 「こんにちは世界」 = テスト() プリント()#のハローワールド #匿名関数の構文:ラムダの引数:式 テスト= ラムダ:「こんにちは世界」 B = テスト() 印刷(b)のハローワールド#
#パスパラメータ DEF TEST2(NUM1、NUM2): リターン num1を+ num2の RES = TEST2(1、2 ) 印刷(RES) #3
#匿名関数
TEST2 =ラムダNUM1、NUM2:NUM1 + NUM2
RES = TEST2(1、2)
印刷(RES)#3
3.組み合わせるフィルタと無名関数
#フィルタフィルタ(FUNC、イテレート可能オブジェクト) のLi = [12、63、78であり、90、2、45、23である] DEF Test3は(X): リターン X> 50 RES = フィルタ(TEST3、Li)と プリント(RES) #<フィルタオブジェクト0x000001E992A45348で> 印刷(リスト(RES)) #[63、78、90] #匿名関数に変わる RES =フィルタ(ラムダ X:X> 50 、Li)と プリント(RES) #<0x000002DA4CE25588 ATオブジェクトフィルタ> プリント(リスト(RES)) #[63、78、90です]
関数のパラメータとして使用して4.無名関数
私たちは、単純な計算を行うと、あなたは直接、匿名関数を使用することができます
テスト= ラムダ NUM1、NUM2:NUM2 + num1を プリント(試験(1、2)) #3
この機能は、ほかの業務の目的を達成することができますが、欠点がありますが:柔軟ではない、あなたは追加の操作を行うことができます
我々は、変換によりステップによる操作ステップを向上させることができ、それは単純な計算であることができます
デフTEST4(A、B、FUNC): RES = FUNC(a、b)は 戻りRES #ラムダ匿名パラメーターとして機能し、以前よりも柔軟で、適応性の強化のため NUM = TEST4(4、5、ラムダ A、B:A * B) プリント(NUM) #20
私たちは関数呼び出しに渡されたパラメータとして無名関数を置くときは、パラメータfuncを変更することにより、算術演算を実行することができますが、この引数は、その後、FUNC入力で、非常に強い実用的ではない渡さより便利に
#これより柔軟で適応性のことを、入力匿名関数を実装 FUNC = INPUTは(「匿名関数を入力してください:」) FUNC = のeval(FUNC) デフTEST4(A、B、FUNC): RES = FUNC(a、b)は 戻りRES RES4 = TEST4(23、87 、FUNC) プリント(RES4)
このコードは、私たちは無限ループは、この問題を解決することができます使用して、一度だけ、一回の連続使用の手立てを数えていない実行、強化、まだ不備よりも実用的です
しばらく真: フラグ =入力(" 退出请按[Y / Q]:" ) であれば!フラグ= " Q " とフラグ=!" Y " : FUNC =のeval(INPUT(" 匿名関数を入力してください:" )) NUM1 = INT(INPUT(" NUM1を入力してください:" )) num2の = INT(INPUT(" NUM2を入力してください:" )) DEFのTEST5(NUM1、NUM2、FUNC): リターンFUNC(NUM1、NUM2) RES = TEST4(NUM1、NUM2、FUNC) プリント(RES) 他: ブレーク
第二に、関数のスコープ
1.可変範囲を定義することができます役割
関数外で定義された2変数グローバル変数は、グローバル変数であります
= A 「こんにちは世界」 #グローバル変数 DEF テスト(): A = " こんにちは" #ローカル変数の 印刷(" 1:" 、A) 印刷(" 2:"、A) #2:Hello Worldの テスト() #1:こんにちは1 2後ろのテスト機能を呼び出した後に2であるからである。 印刷(" 3:"、A) #3:Hello Worldの #変数の関数定義の外
グローバルグローバル変数の関数定義の内部
= A 「こんにちは世界」 #グローバル変数 DEF テスト(): 株式会社参加無料 A = " こんにちは" #ローカル変数の 印刷(" 1:" 、A) 印刷(" 2:"、) #2:ハローワールド テスト() #1:ハロー プリント(" 3:"、) #3:こんにちは
変数定義された関数内3.ローカル変数
上記の例から私たちを知って、ローカル変数は、関数の外には適用できません
4.非ローカル
この関数は、ネストされた関数で使用されています
#非ローカル 1 DEF test_outと(): 2 STR1 = " ハローハロー" 3 DEF test_inと(): 4 STR1 = " こんにちは" 5 STR1 + = " 世界" 6 プリント(" 1 "、STR1) #1:ハローワールド 7 test_inと() 8 プリント(" 2 "、STR1) #2:ハローハロー test_outと()
コードが実行されるTEST_OUT()関数が呼び出されたとき、機能は、上から下に行うが、ライン7は、test_inと関数が呼び出されたときに場合、ライン6は、次に、コードを実行するための「Hello World」を印刷すること、及び8つの行うラインコード、ハローハロー印刷、反対STR1 =「hello」を予約する場合は、前者と後者とは対照的に、STR2 =「ハローハロー」変数広い役割は、ローカル変数であり、関数はtest_inとありません呼び出します
私たちは、内部関数の中で、外部関数を呼び出したい場合は、我々は、非局所使用する必要があります
デフ)(test_outと: STR1 = 「ハローハロー」 デフtest_inと(): #STR1 = "こんにちは" 非ローカルSTR1 STR1 + = " 世界" 印刷(" 1:"、STR1) #1:こんにちはこんにちは世界 test_inと() 印刷(" 2:"、STR1) #2:ハローハローワールド test_outと()
要約:
1.スコープはローカルスコープで、関数は、外側と呼ぶことができない局所変数として定義された内部機能
2.外部関数は、グローバル変数として定義され、その範囲はグローバルスコープを使用すると、関数内で変更したい場合は、グローバル必要があります
3.外側の関数の変数を、あなたは内側の層で変更したい場合は、必要な非ローカル