関数の定義と呼び出し:
def関数名(パラメーター1、パラメーター2):
**'' '機能コメント' '' **
print( 'function body')
戻り値
定義:defキーワードスイッチ、スペース、関数名と括弧、最後にコロン
defは固定され、不変です
関数名:関数名には、文字、数字、および下線の任意の組み合わせが含まれます(数字で始めることはできません)
関数呼び出し:戻り値=関数名(パラメーター1、パラメーター2)
関数の戻り値:
1- リターンの役割:関数の実行を終了します
2- まず、戻り値は任意のデータタイプにすることができます
3- 関数は戻り値を持つことができます:戻り値がある場合、効果を得るには変数によって受け入れられる必要があります
戻り値がない場合もあります。
4- returnは値(変数)を返します
5- returnは複数の値を返します(複数の変数):複数の値はコンマで区切られ、タプルの形式で返されます
承認:1つの変数を使用して受信することも、複数の変数を使用して受信することもできます(使用する変数をいくつか返すだけです)。
関数のパラメーター:
1- 実際のパラメータと正式なパラメータ:
正式なパラメータ:関数が定義されるときに定義されるパラメータです
実際のパラメーター:関数が呼び出されたときに渡されるパラメーター
2- 複数のパラメーターを渡します。
複数のパラメーターをコンマで区切って渡すことができます。
パラメータを渡すという観点から、パラメータを渡すことによって関数を呼び出す方法は2つあります。
使用法:1-位置パラメータはキーワードパラメータの前にある必要があります
2- パラメータに割り当てることができるのは1回だけです
3- デフォルトパラメータ:
使用法:なぜデフォルトのパラメーターを使用するのですか?小さな変更値をデフォルトパラメータとして設定します
定義:デフォルトパラメータを渡すことはできません。渡さない場合はデフォルト値が使用されます。渡される場合はデフォルト値が上書きされます。
デフォルト値は、関数が定義されたときに決定されます
3- 動的パラメータ:
位置によって渡された冗長なパラメーターは、引数によって均一に受信され、タプルの形式で保存されます
キーワードごとに値ごとに複数のキーワードパラメータを受け取り、kwargsによって受け取り、dictの形式で保存します
概要:
定義:defキーワードは、関数名で始まり、スペースの後に括弧()が付いています。
パラメータ:括弧はパラメータを受け取るために使用されます。複数のパラメーターが渡される場合は、パラメーターをコンマで区切ります。
複数のパラメーターを定義することも、定義しないこともできます。
パラメータにはさまざまな種類があります。複数のパラメータ定義が含まれる場合は、常に位置パラメータ、* args、デフォルトパラメータ、** kwargsの順序で定義する必要があります。
たとえば、特定のパラメータタイプは上記の定義プロセスでデフォルトになり、他のパラメータは引き続き上記の順序に従います。
コメント:関数の最初のステートメントにコメントを付ける必要があります。
関数本体:関数の内容はコロンで始まり、インデントされます。
戻り値:return [式]関数を終了します。式なしで返すことは、なしを返すことと同じです
def関数名(パラメーター1、パラメーター2、* args、デフォルトパラメーター、** kwargs):
""" 注:関数とパラメーターの説明 "" "
機能本体
……
戻り値
python関数の高度な学習
三元演算子
結果+ if +条件+ else +結果
1つ、名前名とスコープ
名前の本質:名前と価値のあるバインディング関係を保存します
名前付けには次の3つのタイプがあります。
グローバルネームスペース
ローカル名前名
組み込みの名前名
ロードの順序と3つの値の選択:(名前空間とスコープは分離できません)
ロードシーケンス:組み込みの名前付け(実行前にロード)->
グローバルネームスペース(実行中:上から下にロード)->
ローカル名前名(実行:呼び出されたときにのみロード)<
値:
ローカルで呼び出されます:ローカルネームスペース->グローバルネームスペース->組み込みネームスペース
グローバルで呼び出す:グローバル名前空間->組み込み名前空間
範囲:
スコープの概念があるのはなぜですか。
関数内の変数がグローバルに影響を与えないようにするため
スコープはスコープであり、有効スコープに応じてグローバルスコープとローカルスコープに分けることができます
グローバルスコープ:組み込みのネームスペース、グローバルネームスペースを含み、ファイル全体のどこからでも参照でき、グローバルに有効
ローカルスコープ:ローカルネームスペース。ローカルスコープでのみ有効になります。
全体像を見てください:名前を使用してください:
グローバルが有用な場合、グローバル:グローバルが使用されていない場合、組み込み
2つ目は、関数のネストとスコープチェーンです。
ネストされた関数呼び出し:
1 # ネストされた関数呼び出し
23 def max2(x,y):45 m = x if x>y else y
67 return m
891011 def max4(a,b,c,d):1213 res1 =max2(a,b)1415 res2 =max2(res1,c)1617 res3 =max2(res2,d)1819return res3
20212223... max4(23,-7,31,11)...
ネストされた定義:内部で定義された関数をグローバルに直接呼び出すことはできません
内部関数を保護するために、内部関数は外部関数でのみ呼び出すことができることを確認してください
def animal():
def tiger():print(‘ bark ’)print(‘ eat ’)tiger()animal()
関数のスコープチェーン:
第三に、関数名の本質(-メモリアドレス)
1- 引用できます
2- コンテナタイプの要素として使用できます
3- 関数パラメーターおよび戻り値として使用できます(通常の変数として使用できます)
4、閉鎖
内部関数には、グローバルに機能する名前ではなく、外部スコープの名前への参照が含まれています。 (上位ドメイン名への関数参照)
def func():
name = ‘eva’
def inner():print(name)
デコレーター
デコレータの本質:クロージャ機能
デコレータの機能:元の関数とその呼び出しメソッドを変更せずに、元の関数の関数を拡張します
統語糖:
1 import time
23 def timer(func):45 def inner():67 start = time.time()89func()1011print(time.time()- start)1213return inner
1415 @ timer# ==> func1 =timer(func1)===>統語糖
1617 def func1():1819print(‘in func1’)2021func1()
・オープンおよびクローズドの原則:拡張に対してオープンであり、変更に対してクローズ
1- 拡張可能
なぜそれは拡張機能に対してオープンでなければならないのですか?
どのプログラムも、設計の最初にすべての機能を念頭に置いて、将来的に更新や変更を行わないことは不可能であると言います。したがって、コードの拡張を許可し、新しい機能を追加する必要があります。
2- 変更のため閉鎖
なぜそれは変更に対して閉鎖されるべきですか?
先ほど申し上げたように、私たちが書いた関数は他の人に渡されて使用される可能性が高いため、この時点で変更すると、すでにその関数を使用している他のユーザーに影響を与える可能性があります。
デコレータは、このオープンとクローズの原則に完全に従います。
デコレータのメイン関数と固定形式:関数の呼び出し方法を変更せずに、関数の前後にいくつかの関数を追加します。
固定フォーマット:(固定ユニバーサルフォーマット)
1 def timer(func):2345 def inner(*args,**kwargs):6789...関数を実行する前に行うこと...10111213 re =func(*args,**kwargs)14151617...機能実行後の対処方法...18192021return re
22232425 return inner
パラメータ付きデコレータ:
def outer(flag):
def timer(func):
def inner(*args,**kwargs):if flag:print(「機能を実行する前にすべきこと」)
re =func(*args,**kwargs)if flag:print(「機能実行後の対処方法」)return re
return inner
return timer
@ outer(False)
def func():print(111)func()
複数のデコレータが同じ機能を装飾します。
def wrapper1(func):
def inner():print(‘wrapper1,before func’)func()print(‘wrapper1,after func’)return inner
def wrapper2(func):
def inner():print(‘wrapper2,before func’)func()print(‘wrapper2,after func’)return inner
@ wrapper1
@ wrapper2
def f():print(‘in f’)f()
再帰および二分法アルゴリズム
再帰:関数内で関数自体を呼び出す
1 import sys
23 print(sys.setrecursionlimit(100000))
3つのレベルのメニューを再帰的に実装します。
1 menu ={2「北京」:{3「ハイディアン」:{4「ウダオコウ」:{5 ‘soho’:{},6「NetEase」:{},7 ‘google’:{},8},9「中関村」:{10'iqiyi ':{},11「カーハウス」:{},12 ‘youku’:{},13},
14 「シャンディ」:{15「バイドゥ」:{},16},17「変更」:{18「Shahe」:{19「オールドボーイ」:{},20「ベイハン」:{},21},
22 「天通源」:{},23「ホイロングアン」:{},24},25「チャオヤン」:{},26「イーストシティ」:{},27},
28 '上海':{29「ミンハン」:{30「人の広場」:{31「フライドチキンショップ」:{}32},33},34「プドン」:{},35},36「シャンドン」:{},37}3839 def three(dic):40for key in dic :41print(key)42 k =input(“>>>>>>>>”)43if k in dic:44three(dic[k])45three(dic)
バイナリ検索アルゴリズム:
1 l =[2,3,5,10,15,16,18,22,26]23 def find( l,aim,start,end ):45 mid =( end+start )// 267if(l[mid]> aim):89 end = mid
1011 returnfind(l,aim,start,end)1213elif(l[mid]< aim):1415 start = mid
1617 returnfind(l,aim,start,end)1819else:2021return mid
2223 print(find( l,15,start=0,end=len(1)-1))
Recommended Posts