関数の使用法
関数パラメーターのタイプ
不変の型パラメーター:数値、文字列str、タプルtuple。
変数タイプ:
aは、リストおよび辞書dict 関数では不変ですFun(a)は内部的に値を変更しますが、それ自体に影響を与えることなく、コピーされた別のオブジェクトのみを変更します。
1.不変の型パラメーターを渡してもパラメーター自体には影響しません
2.変数型パラメーターを渡してもパラメーター自体に影響します
#不変パラメータータイプ
a = 1 print (id(a)) #2009628784 def func(a): a = 10 print (a、id(a)) func(a) #20 2009629392 def func(a): a = 1 印刷(a、id(a)) func(a) #1 2009628784 印刷(a、id(a)) #1 2009628784
#可変パラメータタイプ B = [10,20 ] プリント(ID(B)) #2324968580360 DEF FUNC(B): b.append( 30 ) プリント(ID(B)) FUNC(B) #2324968580360 印刷(B、 id(b)) #[10、20、30] 2324968580360
関数パラメーター(必須パラメーター、デフォルトパラメーター、オプションパラメーター、キーワードパラメーター)
#必須パラメーター def func1(x): return x * x func1(2 ) #4 # デフォルトパラメーター 、#注:デフォルトパラメーターは必須パラメーターの後に配置する必要があります#欠陥:
def funcx(L = []): L.append(" The End " return L funcx()#関数定義では、デフォルトパラメータLで指定されたアドレスが決定されています。呼び出しごとにLの内容が変更されます
関数func2 DEF(X、Y = 10 ): リターン X * Yの 関数func2(3 ) #30 関数func2(3、5。 ) # 15
オプションパラメータ
DEF FUNC3(* nmbers):
SUM = 0
Iの数値で:
SUM = SUM + i * i
return sum
func3([1,2,3])
#14
キーワードパラメータ
def func4(name、** kwargs):
print( "data:"、kwargs)
再帰関数
再帰関数関数が内部でそれ自体を呼び出す場合、この関数は再帰関数です。
再帰関数を使用するための条件:
1.出口を出る必要があります
2.独自の
case1を呼び出します:
#再帰関数の評価3 ... * 2 * 1 7 * * * 8 9 * 10。。。 DEF FUNC(X): IF X == 1 : リターンX リターン X * FUNC(-X 1 ) プリント(FUNC(10 )) #3628800
ケース2:
#リストをすべて
展開しますlst1 = [1,2、[3,4、[5、[6、[7]、8,9]]、10]、 11,12,13 ] lst2 = [] def func(lst1 ): のために私にLST1: IFのでisinstance(I、リスト): #リストは、FUNCを実行された場合(ⅰ) FUNC(ⅰ) 他: lst2.append(ⅰ) #を、それはLST2要素のリストに入れていない場合 (FUNC lst1) # [ 1、2、3、4、5、6、7、8、9、10、11、12、13 ]
ケース3:
#再帰関数を使用してフィボナッチ数列を見つけます
#1 1 #2 2 #3 2 + 1 = 3 #4 3 + 2 = 5 #... #nf(n-1)+ f(n-2) def func (n): if n == 1 または n == 2 : return n return func(n-1)+ func(n-2 ) print(func(5 )) #8
ケース3:
カエルは一度に1、3、7、または10ステップジャンプできますQ:nステップあります。 1-2 1 n <= 2 f(n)= 1 3 2 f(2)+ f(0)= 2 4 2 + 1 = 3 f(3)+ f(1)= 4 5 3 + 1 = 4 6 4 + 2 = 6 ... nf(n -1)+ f(n-3)+ f(n-7)+ f(n-10 ) def func(x): if 1 <= x <3 : return 1 elif x < 0: return 0 else : return func(x-1)+ func(x-3)+ func(x-7)+ func(x-10 ) print(func(10 )) #22
関数の名前空間
ネームスペースは、ローカルネームスペース、グローバルネームスペース、および組み込みネームスペースの3つのタイプに分かれています。ローカルネーム
スペース:各関数には、ローカルスペースと呼ばれる独自のネームスペースがあり、関数のパラメーターやローカルを含む、関数の変数を記録します。定義された変数
def test(): a = 2 print(a) test() print(a) #2 #NameError:名前' a ' が定義されていません
グローバル名前空間:各モジュールには、グローバル名前空間と呼ばれる独自の名前空間があり、関数、クラス、その他のインポートされたモジュールなど、モジュールの変数を記録します。
a = 2 def test(): print(a) test() print(a) #2 #2
組み込みの名前空間:すべてのモジュールがアクセスでき、組み込みの関数と例外が格納されます。
print()、input()...
ローカル変数とグローバル変数
ローカル変数:関数内で定義された
変数グローバル変数:関数外で定義された変数。不変タイプの場合、関数内で変更できません。
NAME = ' zzq ' LIST1 = [ 10 ] DEF FUNC(): 名前 = ' ジョンソン' list1.append(名) プリント(" 内側" 、名) FUNC() プリント(" 外側" 、名) プリント(LIST1) #内側ジョンソン #外側zzqの 名前 = ' zzq ' 名前 = ' ジョンソン' DEF FUNC(): グローバル名#全局变量 名 = ' 123' func() print(name) #123 name = ' zzq ' def func1(): name = ' ls ' def func2(): nonlocal name#関数のローカルスコープが変数を見つけられない場合、インタープリターは自動的に外部関数で name = ' abc ' func2() print(" --------- " 、name) func1() print(name)を検索します
- 関数はローカルスコープを定義し、モジュールはグローバルスコープを定義します。
関数でグローバルスコープを定義する場合は、グローバル修飾子を追加する必要があります。- 変数名の解決:LEGBの原則
関数で認証されていない変数名を使用する場合、Pythonは4つのスコープ[ローカルスコープ(L)(グローバル変数を使用せずに内部で宣言された関数)を検索し、その後に上位レイヤー構造を検索します。 defまたはラムダのローカルスコープ(E)、続いてグローバルスコープ(G)(モジュールレベルで宣言されたグローバルまたは変数を使用して関数内で宣言された変数)、最後に組み込みスコープ(B)(つまり、Pythonの組み込みクラス)そして、関数など)]と変数名を見つけることができる最初の場所で停止します。検索プロセス全体で変数名
が見つからない場合、Pythonはエラーを報告します。- https://www.cnblogs.com/summer-cool/p/3884595.htmlに転載