Pythonのノート17

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)

おすすめ

転載: www.cnblogs.com/cuiyongchao007/p/12303316.html