1.コンテンツ今日
- イテレータ(3 *)
- 発電機(4 *)
- デコレーター(5 *)
- プロジェクト構造
- ロギングモジュール
2.要約&雇用
2.1要約
2.1.1機能(内蔵/カスタム)
基本的な機能構造
def func(a1,a2): pass
- パラメータ
- 返却値
- 機能を実行します
小高度な機能
- 関数の変数が行います
- 関数のパラメータはやります
シニア機能
- 関数の戻り値を行います
- ネストされた関数
&クロージャーデコレータ
再帰
無名関数
内蔵機能
2.1.2モジュール(内部/サードパーティ製/カスタム)
定義モジュール
- 内蔵:時間/ JSON /日時/ OS / SYS ... [再]モジュール
- サードパーティー:
- インストール:
- PIPパッケージ管理ツール:ピップはxlrdをインストール
- ソース・インストール:
- ソースパッケージをダウンロード:圧縮ファイル。
- ファイルを解凍します
- オープンCMDウィンドウは、およびディレクトリを入力します。cd C:\ Python36 \ Libの\サイトのパッケージを
- 実行:python36 setup.pyのビルド
- 実行:python36はsetup.py installを
- インストールパス:C:\ Python36 \ Libの\のsite-packages
- あなたは、サードパーティのモジュールを知っています:
- xlrd読み、xlwd位に秀でます
- リクエスト
- インストール:
- カスタム
- PYファイル
- フォルダの
__init__.py
#1 PY2を持っている必要があります
呼び出しモジュール
インポート
- インポート機能モジュール1モジュール1()
- インポートモジュール1モジュール1モジュール2モジュール3モジュール2モジュール3の機能()
XX輸入XXXから
- モジュールインポート機能モジュールの機能から()
- FFとしてモジュールのインポート機能モジュールから()
- モジュール1から機能モジュールインポート*()関数2()
- モジュールインポートモジュールモジュール関数から()
- M mとしてモジュールからインポートモジュール。関数()
特殊なケース:
デフォルトでロードインポートフォルダ
__init__.py
コールは--init--.pyファイルの内容です。ファイルのインポートから*
ファイルは、関数内で直接使用することができます。
その他の2.1.3
- 二つの値のデータ交換
- 派生
- リスト(*)
- 辞書
- セット
3.コンテンツ今日
クラスとオブジェクト
3.1イテレータ
私はイテレータを書きません。
タスク:データリストの全てをご提示ください。
+インデックス+カウンターしばらく
イテレータ、特定のオブジェクト(STR /リスト/タプルがオブジェクト/ dictの/セットクラス作成)のための-反復可能要素の取得に一つずつ、表現:
__next__
方法及び素子繰り返しオブジェクトを取得することができ、各コール(フロントの後)を得ました。リストには、イテレータに変換します:
- 走行V1 =([11,22,33,44])
v1 = [11,22,33,44].__iter__()
繰り返し呼び出す:イテレータは、それぞれの値を取得したいです
val = v1.__next__()
v1 = [11,22,33,44] # 列表转换成迭代器 v2 = iter(v1) result1 = v2.__next__() print(result1) result2 = v2.__next__() print(result2) result3 = v2.__next__() print(result3) result4 = v2.__next__() print(result4) result5 = v2.__next__() print(result5) """ # v1 = "alex" # v2 = iter(v1) # while True: # try: # val = v2.__next__() # print(val) # except Exception as e: # break
最後の反復に、エラーまで:を呼び出すとStopIterationエラー、それが反復を完了したことを言いました。
内部があるかどうか:オブジェクトがイテレータであるかどうかを確認する方法
__next__方法
。
forループ
v1 = [11,22,33,44] # 1.内部会将v1转换成迭代器 # 2.内部反复执行 迭代器.__next__() # 3.取完不报错 for item in v1: print(item)
3.2反復可能オブジェクト
その中の
__iter__()
メソッドを返すイテレータ。(*)v1 = [11,22,33,44] result = v1.__iter__()
これは、ループのためのものであってもよいです
3.3ジェネレータ(バリオグラム)
# 函数
def func():
return 123
func()
# 生成器函数(内部是否包含yield)
def func():
print('F1')
yield 1
print('F2')
yield 2
print('F3')
yield 100
print('F4')
# 函数内部代码不会执行,返回一个 生成器对象 。
v1 = func()
# 生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行。
for item in v1:
print(item)
def func():
count = 1
while True:
yield count
count += 1
val = func()
for item in val:
print(item)
要約:収率の機能がある場合、この関数は、関数発生器であり、呼び出しジェネレータ関数はジェネレータを返し、発電機のみのサイクルのためのものである、各サイクルを実行する内部生成関数コードが取得します降伏値が返されます。あなたは収量のために使用されるループを読み取ることができません(例:復帰前の収率)。
def func():
count = 1
while True:
yield count
count += 1
if count == 100:#终止条件设置
return
val = func()
for item in val:#item只取yield中的值。
print(item)
例:読み取りファイル(ページによってページを読み込むためのファイル、ページあたり10行)
def func():
"""
分批去读取文件中的内容,将文件的内容返回给调用者。
:return:
"""
cursor = 0
while True:
f = open('db', 'r', encoding='utf-8')# 通过网络连接上redis
# 代指 redis[0:10]
f.seek(cursor)
data_list =[]
for i in range(10):
line = f.readline()
if not line:
return
data_list.append(line)
cursor = f.tell()
f.close() # 关闭与redis的连接
for row in data_list:
yield row
for item in func():
print(item)
その他の知識:
- キーワードからyeild [縮小]
- 以下ジェネレータ導出[]
概要
反復のイテレータオブジェクトが1つの要素を取得することによって実行することができる、内部反復__next__オブジェクトは、1つにデータを取得するための方法を有しています。
__iter__とイテレータ(ビルダー)を返すためにこのようなオブジェクトをイテラブル、両方の方法においてforループであってもよいです。
発生器は、内部ファンクションジェネレータ機能があり、収率は、関数呼び出しが発生、サイクルジェネレータを返し、内部コードは、機能を実行します。
特別イテレータ(**):
def func(): yield 1 yield 2 yield 3 v = func() result = v.__next__() print(result) result = v.__next__() print(result) result = v.__next__() print(result) result = v.__next__() print(result)
特別反復可能:
def func(): yield 1 v = func() result = v.__iter__() print(result)