パラメータデコレータ、イテレータ、発電機があります。

デコレーターサプリメント

#詐欺を犯し、Aラッパーとして詐欺を犯し機能のメモリアドレスに元の関数名についてです
あなたは元の関数と同じ仕事をする必要がありますので、#ラッパー
functoolsインポートラップから#

:#DEF outter(FUNC)
#@wraps(FUNC)
#DEFラッパー(* argsを、** kwargsから):
は"" "これはホーム機能である" ""
#RES = FUNC(* argsを、** kwargsから)#RES指数=(1,2)
リターンがRES

#手動で元の関数をラッパー関数に割り当てられた属性
#1、関数ラッパー.__ name__ =プリミティブ.__ name__
#2、関数ラッパー.__ doc__内の例題=プリミティブ.__ディスプレイdoc__内の例題
#ラッパー.__ name__ = FUNC .__ name__
ディスプレイdoc__内の例題#ラッパー.__ doc__内の例題= FUNC .__

ラッパー#リターン

#@ #=インデックスoutter outter(インデックス)
#のDEF指数(X、Y):
#「」「」「これはホームページの機能である」
#印刷(X、Y)

印刷(インデックス。__名前__)
#プリント(インデックス.__ doc__内の例題)#help(インデックス)

#インデックス(1,2)#ラッパー(1,2)

パラメータがありますデコレータ

#A:知識ベースの
シンタックスシュガーの制限のため、@#、機能outterは引数を1つしか持つことができ、受信のみに使用され
#は、装飾品のメモリアドレスです
:#DEF outter(FUNC)
メモリ## FUNC =ファンクションアドレス
#DEFラッパー(* argsを、** kwargsから):
#RES = FUNC(* argsを、** kwargsから)
#リターンRES
#リターンをラッパー

### @outter outter指数=(インデックス)指数=#>ラッパー
#@ outterの#outter(インデックス)
#のDEF指数(X、Y):
印刷(X、Y)

意志の後の
#インデックスのパラメータは、ラッパーのパラメータがどのように見えるか
、それが何だったかのように、ラッパー復帰の#インデックス戻り値どのような値であるべき
#インデックスがどのように見えるの属性、ラッパー属性が==「インポートfunctoolsラップからのようになります

:#ShanBaoプレイ
#DEF AUTH(FUNC、DB_TYPE):
#DEFラッパー(* argsを、** kwargsから) :
INPUT名=#( '>>>あなたの名前:').strip()
#PWD = INPUT( '>>>パスワード:').strip()

#IF DB_TYPE == 'ファイル':
印刷( 'ベースの認証ファイル')
#IF名前=='エゴン'とPWD ==' 123 ':
#RES = FUNC(* argsを、** kwargsから)
#リターンRES
#他に:
#印刷('ユーザパスワードまたはエラー「)
elifのDB_TYPE ==# 'mysqlの':
印刷( 'mysqlののベース認証')
#elifのDB_TYPE == 'LDAP':
印刷( '認証LDAPに基づく')
他に:
#印刷( 'サポートされていませんDB_TYPE')

#戻りラッパー

ソース### @auth#アカウントのパスワードファイル
DEFインデックス#(X、Y):
印刷( 'インデックス- >>%のS:%S' %(X、Y))

ソース### @auth#アカウントのパスワードデータベース
#DEFホーム(名):
- ( '>>%Sホーム' %名)を印刷
#の
ソース## @auth#アカウントのパスワードはLDAPです
:#DEF転送()
印刷( '転送')

#= AUTH指数(インデックス、 'ファイル')
ホームAUTH =#(ホーム、 'MySQLの')
#= AUTHを転送(転送、 'LDAP')

##インデックス(1,2)
##ホーム( 'エゴン・')
は##転送()

#ShanBao 2
#デフのauth (DB_TYPE):
#DEFデコ(FUNC):
#warpper DEF(* argsを、** kwargsから):
名= INPUT( '>>>あなたの名前:').strip()
#PWD = INPUT(「あなたのパスワード>>>:「).strip()

IF DB_TYPE ==# 'ファイル':
印刷( 'ベースの認証ファイル')
:#名前== 'エゴン'とPWD == '123' IF
#RES = FUNC(* argsを、** kwargsから)
#リターンRES
他に#:
印刷( 'ユーザパスワードまたはエラー')
#elifのDB_TYPE == 'mysqlの':
印刷( 'mysqlののベース認証')
のelif DB_TYPE == 'LDAP' #:
印刷( 'ベースの認証LDAP' )
#他に:
#印刷( 'サポートされていませんDB_TYPE') #

リターンラッパー
#リターンデコ

#デコ= AUTH(DB_TYPE = 'ファイル')
#ソース@deco#アカウントパスワードファイルの
インデックスデフ#(x、y)は :
#( 'インデックスを- >>%S:%S' %(X、Y))を印刷

#=デコAUTH(DB_TYPE = 'MySQLの')
ソース@deco#アカウントパスワードデータベース
デフホーム(名)#:
#印刷する- ( 'ホーム>> S%' %名)

#=デコAUTH(DB_TYPEは= 'LDAP')
アカウントのパスワード@deco#のソースがLDAPである
#DEF転送():
印刷( '転送')

インデックス#(1,2)
ホーム( 'エゴン・')
転送()

シンタックスシュガーの
DEF#AUTH(DB_TYPE):
#DEFデコ(FUNC):
DEF warpper#(* argsを、** kwargsから):
名= INPUT( '>>>あなたの名前:').strip()
#PWD = INPUT( '>>>パスワード:').strip()

#IF DB_TYPE == 'ファイル':
#印刷(「ベースの認証ファイル」)
IF名==# 'エゴン'とPWD == '123':
#RES = FUNC(* argsを、** kwargsから)#インデックス(1,2)
リターンRES
#他に:
#印刷( 'ユーザパスワードまたはエラー' )
#elifのDB_TYPE == 'mysqlの':
印刷( 'mysqlののベース認証')
#elifのDB_TYPE == 'LDAP':
印刷( '認証LDAPに基づく')
他に:
#印刷(「サポートされていませんDB_TYPE ')
リターンwarpperの
#リターンデコ

#の@auth(DB_TYPE ='ファイル')## @decoデコ指数=(インデックス)インデックスは= warpper#
#DEF指数(X、Y):
印刷('インデックス- %>> S:%s'は%(X 、Y))

@Auth#(DB_TYPE = 'MySQLの')## @deco =ホームデコ(ホーム)=#ホームwarpper
#DEFホーム(名):
印刷( 'ホーム- >> S%' %名)


#@auth(DB_TYPEソースは、= 'LDAP')#アカウントのパスワードがLDAPである
#DEF転送():
印刷( '転送')

インデックス(1、2)
ホーム( 'エゴン・')
転送()

参照は、デコレータテンプレート#あり
#そこ参照(X、Y、Z)DEFデコレータ:
#DEF outter(FUNC):
#DEF warpper(*引数、** kwargsから):
#RES = FUNC(*引数、** kwargsから)
#リターンは、RES
#戻りwarpperを
outter#戻り

参照して#@デコレータを(1、Y = 2、Z = 3。。)
#DEF内装のオブジェクト():
パス

イテレータ

「」 ' 
イテレータは何1
イテレータが反復ツールの値を指し、反復は反復プロセスであり、各反復が
継続し、単に繰り返さない反復の結果に基づいている

理由を、2反復子が有する
反復子が反復値ツールに使用され、取り出しサイクルのタイプに関連する複数の値は
、文字列、タプル、辞書のリスト、ファイル開くように設定:あり

、「エゴン」[=リットル'劉'、 'アレックス']は
I 0 =
しばらくI <lenの(L)を:
印刷(L [I])
I + = 1。

反復方法値上のみデータ型インデックスに適用されます文字列のリストを、元グループ
イテレータのインデックス値に基づいて制限に対処する
Pythonはイテレータであるインデックスモード、の値に依存することなく提供されなければならない


3、どのイテレータ

「」 '
#1、オブジェクトは、反復してもよい。たびに内蔵方法が存在する反復オブジェクトと呼ばれる__iter__
#S1 = ''
## S1 .__ ITER __()
#1
#1 L = []
## L .__ ITER __()

#T =(1)
## T ITER __ .__()

#D = { 'A' :. 1}
## D.__iter __()

SETL = {1,2,3}#
## SETL .__ ITER __()

開くと#( 'A.TXT'、MODE = 'W')AS F:
## F .__ ITER __()
パス

#2、コール反復子オブジェクト変換する__iter__反復方法は、オブジェクトの下にあることができる
。3#1 D = {:2、 'C' '' :. 1、 'B'}
#1 d_iterator ITER .__ D = __()
プリントが( d_iterator)

印刷(d_iterator .__次__())
印刷(d_iterator .__次__())
印刷(d_iterator .__次__())
印刷(d_iterator .__次__())#スローを呼び出すとStopIterationの

#トゥルー中:
#してみてください。
印刷#(d_iterator .__次__())
呼び出すとStopIterationを除く:
#BREAKの
#の
#を印刷( '==== >>>>>>')きれいな場合にとら#反復子値は、その値結婚しない
#d_iterator = D .__ ITER __()
ながら、真:
#してみてください。
印刷#(d_iterator .__次__())
呼び出すとStopIterationを除く:
#BREAKの

#1 L = [1,2,3,4,5]
#= .__ l_iterator ITER __()L

#しばらく真:
#試し:
#印刷(l_iterator。 __ __next())
を呼び出すとStopIteration以外#:
ブレーク

。#3、イテレータオブジェクトの詳細イテラブル
オブジェクト組み込み方法__iter__:#3.1イテレート可能オブジェクト(「イテレータ・オブジェクトに変換することができる」)
イテラブルを。 __iter __():イテレータオブジェクトを取得

#3.2イテレータオブジェクト:建て__next__方法をと__iter__メソッドオブジェクト建て
(__ .__次#イテレータオブジェクト):イテレータの次の値を取得
#イテレータオブジェクトを。 __iter __():イテレータ自体を取得し、それのない曲とはっきり曲ルック
#DIC = { '' :. 1、 'B':2 'C' :. 3}

#dic_iterator = DIC .__ ITER __()
印刷#(dic_iteratorはIS dic_iterator .__ ITER __().__ ITER __().__ ITER __())

#4、イテラブル:文字列、リスト、タプル、辞書、ファイルオブジェクトの設定
#イテレータオブジェクト:ファイルオブジェクト
#S1 = ''
#S1 .__ ITER __()

#Lを= []
#L .__ ITER __( )

#T =(1)
#ITER __ .__ T()

#D = { 'A' :. 1}
#D .__ ITER __()

#SETL = {1,2,3}
#SETL .__ ITER __()

#とオープン( 'A.TXT'、MODE = 'W')AS F:
#F .__ ITER __()
#F .__次__()

。#5、ループの動作原理:循環ループのためには、イテレータを呼び出すように呼ばれることがあります
#D = { '' :. 1、 'B':2 'C' :. 3}

#1、D .__ ITER __()イテレータオブジェクトを取得する。
(__イテレータオブジェクト.__次、#2)の戻り値を取得します、次いでKに割り当てられた値を返し
。キャッチ例外のループとエンドループの上昇を呼び出すとStopIterationまで、#3、ステップ2サイクル
:DにおけるK用の#
#プリント(K)

を開くと#(「A.TXT」 、モード= 'RT'Fのよう= 'UTF-8')をコードします。
Fでのラインのために#:ITER __().__ F#
印刷(ライン)

#リスト(「こんにちは」)#原理はサイクルでも同じです

イテレータの利点と要約の欠点、#6
:#6.1の欠点
シーケンスと非シーケンス型のための#I、これは、反復値の統一された方法を提供します。
#II、遅延評価:イテレータオブジェクトは、データストリームで表され、あなたが値を計算するために、次を呼び出すために必要なことができた場合にのみ、それは保存することができ、メモリに一度に一つの値だけ、反復子自体でありますこのようなリストなどの容器の他のタイプのための無限のデータストリームは、要素が必要とするすべては、制限されたメモリサイズは、格納することができる値の数は制限され、メモリに格納されます。

#6.2の欠点は:
#私は、枯渇しない限り、またはイテレータの長さを取得することはできません

だけより「1-オフ」のような、ないバック初めに、値を削除することができ、#IIを、唯一の目標は、イテレータを生成することですそれ以外の場合は、次の呼び出しを待って、一つの場所に滞在する、枯渇の値まで、次の方法を繰り返し、再度同じオブジェクトの反復処理をしたい場合がある場合、あなただけの、新しいイテレータオブジェクトを作成するために、ITERメソッドを呼び出すことができます値を取ることができ、同じイテレータを使用して2つのまたはそれ以上のサイクルは、1サイクルのみに存在バインドされます。

ジェネレータ

#カスタムイテレータを取得する方法:
#のyieldキーワードを関数が存在してたら、コードの関数本体は実行されません関数を呼び出す
オブジェクト生成、カスタムでジェネレータイテレータを返します#を
#デフfuncを():
#プリント( '第')
収率。1
#プリント( '第2')
#2歩留まり
#プリント( '第')
収率。3
#プリント( '第')

#G = FUNC( )
#プリント(G)
ビルダーイテレータ
#G .__ ITER __()
#G .__次に__()

は、関数本体のコードをトリガすることができ、その後の降伏値の後に、収率が停止遭遇
このコールとして#結果が返され
#RES1 = G .__次に__()
プリント(RES1)

#RES2 = G .__次に__()
プリント(RES2)

#RES3 = G .__次に__()
プリント(RES3)

#RES4 = G. __ __next()

#LEN( 'AAA')# 'AAA' .__ lenの__()

#次の(G)#G .__次__()
#ITER(反復可能オブジェクト)#イテラブル.__ ITER __()

アプリケーションのテキスト欄
#DEF My_Range(スタート、STOP、STEP = 1):
の##印刷([スタート。 .. ')
スタートながら<STOP:
スタート収率
#=スタート+ STEPの
#プリント('末端....「)


。#My_Range G =(1,5,2)3. 1#
印刷(次へ(G))
印刷#(次の(G))
印刷(次(G))

My_Range中のn-(1,7,2)のために#:
印刷(N-)

要約収量:
yieldキーワードで#、我々は持っていますイテレータの種類カスタム実装。収量は値を返すために使用することができるが、終わった後のリターンとは異なり、関数の戻り値が検出され、収率は複数の値を返すためにサスペンド機能を実行している状態の機能を維持することができます

おすすめ

転載: www.cnblogs.com/0B0S/p/12558980.html