第24号の要約

第24号

エグゼクティブサマリー

  • モジュールコーミング
  • オブジェクト指向

要約とサプリメント

例1.シングルモード

  • シングルトンとは何ですか?
  • シナリオ
  • __new__方法:インスタンスを作成し、中に__init__前の仕事。
    • 新しいメソッドオブジェクト・スペースを作成する場合、また、アドレス空間内のオブジェクトのクラスへのポインタを作成します。

2.loggingモジュール

  • 録音の目的

    • ユーザーに見て
      • 銀行水
    • プログラマに
      • 統計(トラフィックなど)
      • トラブルシューティング
      • エラーを記録するため、コードの最適化が完了しています。デバッグ
  • basicConfig

    • 長所:使いやすいです
    • 短所:ファイルや画面へのコーディングの問題、缶はない同時に出力。
    • logging.debug / logging.warning
  • ロガーオブジェクト

    • 長所:すぎ
    • 短所:複雑な
    • プロセス
      • ロガーオブジェクトの作成
      • ファイル演算子を作成します。
      • 画面のオペレータを作成します。
      • フォーマットを作成します。
      • Loggerオブジェクトは、ファイルや画面のオペレータにバインドされています
      • ファイルフォーマットと画面のオペレータの設定に
      • 最後にロガーオブジェクトを操作します
    import logging
    
    logger = logging.getLogger()  # logger对象
    
    fh = logging.FileHandler('log_paper.log')  # 文件操作符
    sh = logging.StreamHandler()     # 屏幕操作符
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(module)s: %(message)s') # 格式
    
    fh.setFormatter(formatter)  # 把格式绑定到文件操作符对象中
    sh.setFormatter(formatter)  # 绑定到屏幕操作符对象中
    
    logger.addHandler(fh)  # 把文件对象放入logger中
    logger.addHandler(sh)
    
    logger.warning('message')

3.collectionsモジュール

  • OrderedDict

    from collections import OrderedDict
    
    dic = dict([('a', 1), ('b', 2), ('c', 3)])
    print(dic)
    
    odic = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(odic)
    
    for k in odic:
        print(k, odic[k])
  • namedtuple▲

    from collections import namedtuple  # 可命名元组
    # 创建了一个只含有name price teacher 属性的类 course是类名
    Course = namedtuple('Course',['name','price','teacher'])
    python = Course('Python', 19800,'alex') # 创建了一个对象,封装了三个数据,不可进行更改.
    # 这三个数据在底层是以元组的形式储存,固然这个对象中的值不能修改.
    print(python)  # Course(name='Python', price=19800, teacher='alex') 元组的形式储存数据
    print(python.name)
    print(python.price)
    # 创建了一个类,这个类没有方法,所有属性的值都不能修改
  • defaultdict

4.プロジェクト開発

  1. モジュール
  • モジュールとは何ですか?
    • pyがファイル:プログラマは、ファイルの機能の特定の側面に直接書き込まれています。
    • 道のインポート
      • インポート
      • xxxの輸入XXXから
  • パッケージとは何ですか?
    • フォルダ:フォルダ内のファイルのPY店複数
    • 注意事項
      • パッケージの導入、パッケージが実行に相当し__init__、ファイル
      • パッケージがインポートされている場合は、デフォルトのパケット他のモジュールを使用することはできません
  1. 仕様

    • 項目リスト
      • ビンプログラムエントリ

        • モジュールの検索パス

          import os
          import sys
          base_path = os.path.dirname(os.path.dirname(__file__))
          # __file__永远是当前执行文件的绝对路径
          sys.path.append(base_path)
      • confに設定

        • settings.py
      • SRCビジネスロジック

        • student.py
          • SRC輸入コア輸入コアモジュールから(注:のみ検索パスに追加されたbinディレクトリを入れて、合計プロジェクトディレクトリのファイルを実行)
        • core.py
          • confにインポート設定から設定をインポートモジュール
      • DBデータファイル

      • LIB拡張子

      • ログログファイル

5.スタックとキュー

  • スタックスタック
    • LIFOキューlifoqueue(ラストインファーストアウト)
  • キューキュー
    • FIFOキューfifoqueue(FIFO先入れ先出しで)

6.反射

  1. インスタンス変数を取得するために、オブジェクトの結合方法
  2. クラス変数、クラスメソッド、静的メソッドのクラスを取得するには
  3. モジュール名で任意の変数(共通変数、関数、クラス)モジュールを取得するには
  4. この文書で、この文書の任意の変数を取得するには
  • Hsattr▲

  • GETATTR▲

    # 反射当前文件中的内容
    a = 666
    import sys
    print(getattr(sys.modules['__main__'], 'a')) 
    print(getattr(sys.modules['__name__'], 'a'))
  • SETATTR

  • delattr

7.抽象クラス/インタフェースのクラス

  • これは、サブクラスが仕様に応じて、抽象クラスのメソッドを実装する必要がありそうという、標準をサブクラス化することです。

    # Foo就是一个抽象类
    class Foo:
        def func(self):
            raise NotImplementedError
    
    class Son(Foo):
        def func(self):
            pass
    
    s = Son()
    s.fun()

コンテンツ詳細

モジュール

OSオペレーティング・システム

  • ディレクトリはファイルではありませんかどうかを判断するためにpath.isfile()

  • path.isdir()判決は、ディレクトリフォルダではありません

  • エクササイズ

    '''
    计算任意一个文件夹的大小(考虑绝对路径)
    基础需求:这个文件夹中只有文件
    进阶需求:这个文件夹中有多层文件夹嵌套,每一个文件夹中含有文件
    '''
    import os
    def dir_size(path):
        total = 0
        File = os.walk(path)
        for file,son_file,papers in File:
            for paper in papers:
                paper_path = os.path.join(file, paper)
                size = os.path.getsize(paper_path)
                total += size
        return total
    dir_size(path)

SYS

  • フルパスを見ることができる経路探索モジュールのsys.pathモ​​ジュールが存在し、このモジュールのsys.path導入され、
  • sys.argvのコマンドライン引数を取得
  • sys.modules店現在のプログラムで使用されているすべてのモジュール

日付時刻

  • 今()DateTimeオブジェクト
  • utcnow()
  • strftime( '%Y-%M-%D%H:%M:%のS')日時ターンSTR時間をフォーマットするため
  • strptime( '2020年8月18日午前10時18分18秒'、 '%Y-%M-%D%H:%M:%のS')STR转日時
  • timedelta(日= 180)加算または減算
  • タイムスタンプ(DateTimeオブジェクト)
  • fromtimestamp(タイムスタンプ時間)

時間

  • 時間()タイムスタンプの時間
  • スリープ(n)はn秒を一時停止するためのプログラム

モジュールhashlibを発行するオペレータの概要

  • MD5

    # 数据加密
    import hashlib
    md5 = hashlib.md5('盐'.encode('utf-8'))
    md5.update('str'.encode('utf-8'))
    print(md5.hexdigest())
    # 效验一致性
    import hashlib
    md5 = hashlib.md5()
    
    md5.update('hellow'.encode())   
    # md5.update('hell'.encode())   切分了字符串最后结果也一样
    # md5.update('ow'.encode())     # 296ab79bb0e6b305a21f964bd2ac8531
    
    print(md5.hexdigest())          # 最终结果一样 
  • サプリメント

    # f.read(10)
    # r 模式:读十个字符
    # rb模式:读十个字节
    
    # '中国'里面的'中'是一个字符
    # 'alex'里面的'a'是一个字符
  • エクササイズ

    # 两个大文件一致性校验
    '视频图片文件'
    import os
    import hashlib
    path1 = 'test1'
    path2 = 'test2'
    
    def file_md5(path):
        size = os.path.getsize(path)    # 获取文件总字节数
        md5 = hashlib.md5()
        with open(path, mode='rb') as f:
            while size > 1024:
                content = f.read(1024)  # 每次读1024个字节,
                md5.update(content)
                size -= 1024
            else:
                content = f.read()
                md5.update(content)
                size = 0
        return md5.hexdigest()
    
    print(file_md5(path1) == file_md5(path2))
    '文本文档'
    import hashlib
    path1 = 'test.txt'
    path2 = 'tes'
    
    def file_md5(path, row):  # 路径 每次读多少行
        md5 = hashlib.md5()
        count = 0
        with open(path, mode='r', encoding='utf-8') as f:
            while True:
                for line in f:
                    md5.update(line.strip().encode('utf-8'))
                    count += 1
                    if count == row:
                        break
                content = f.readline()
                md5.update(content.strip().encode('utf-8'))
                if not content:
                    break
        return md5.hexdigest()
    
    print(file_md5(path1,5) == file_md5(path2,5))
  • SHA

    # 一般用sha1算发
    import hashlib
    sha = hashlib.sha1('盐'.encode('utf-8'))
    sha.update('str'.encode('utf-8'))
    print(sha.hexdigest())

JSON

シリアル化:他のデータ型に変換STR /バイトタイプ

デシリアライズ:strが/元のデータ型変換型バイト

  • すべての文字列は二重引用符であります
  • 唯一の最も外側の層は、リストや辞書です
  • 唯一のint型/フロート/ブール/ STR /リスト/ dictのをサポートしています
  • キーは唯一STR辞書です(他のキータイプデシリアライズバックキーがSTRになった場合)
  • (ファイルはシリアライズ各デシリアライズが与えられます読まれたとき、二つのリストファイルに書き込まれた後)、連続的に複数回ロードしません
  • これは、すべての言語をサポートしています

漬けます

  • ほとんどすべてのデータ型のシリアライズとデシリアライズすることができます
  • 連続負荷時間をサポートしています
  • 唯一のPythonはサポートしています

ランダム

  • Randine

  • 選択肢(反復可能)

    • コード/ドロー
  • 試料([1,2,3,4,5]、3)

    • 三つは、ランダムに賞品が描かれた以上、選択されました。

      '''
      发红包
      每一个人能够抢到的金额的概率都是平均的
      200
      100
      50
      解决小数的不准确性
      '''
      # 方式一
      import random
      
      def red_pack(money, num):
          ret = random.sample(range(1, money * 100), num - 1)  
          ret.sort()
          ret.insert(0, 0)
          ret.append(money * 100)
          for i in range(len(ret) - 1):
              yield ((ret[i + 1] - ret[i]) / 100)
      
      ret = red_pack(200, 10)
      for i in ret:
          print(i)
      
      # 方式二
      import random
      
      def fun(All_money, num):
          total_money = All_money * 100
          Moy = total_money
          while num > 1:
              accuracy = total_money / num  # 100 / 9  精准价 11.1111
              money = total_money // num  # 取整价 11
              difference = accuracy - money  # 差价 0.1111
              while True:
                  result = random.randint(0, money)  # 每次抢得红包金额 10
                  if result != 0:
                      break
              Moy -= result
              yield result / 100
              total_money = total_money - result + difference  # 剩余红包金额 100 - 10 + 0.1111
              num = num - 1  # 剩余红包数 9 - 1
          yield Moy / 100
      
      for i in fun(200, 10):
          print(i)
  • random.uniform(1,5)

    • 1と5のランダムな小数点以下の桁間取ることに限定されるものではありません。
  • シャッフル

    • すべてのチェスゲーム、毛の数

ロギング

  • basicConfig
  • ロガーオブジェクト

コレクション

  • OderedDict
  • namedtuple
  • ダブル末端配列両端キュー
  • defaultDictデフォルトの辞書、辞書は値セットにデフォルトの値にすることができます。

shutil

  • make_archive()圧縮されたファイル
  • unpack_archive()ファイルの解凍
  • rmtreeは()ディレクトリを削除します
  • ()名前の変更、移動ファイルを移動

GETPASS

  • 暗号文でGETPASS表示コマンド入力

コピー

  • コピー
  • deepcopy

importlib

  • import_module( 'モジュール名')
    • 等価__import__(「モジュール名」)

functools

  • (関数イテラブル)を低減

オブジェクト指向

基本的な考え方

  • クラスとは何ですか
    • 同じメソッドとプロパティを持つもののクラス
  • オブジェクト/インスタンスとは何ですか
    • 個人の特定のプロパティとアクションを持っています
  • インスタンス化
    • クラスプロシージャから特定のオブジェクトを与えるために、

組み合わせ

  • 別のクラスのオブジェクトのインスタンス変数としてクラスオブジェクト

    class C_learn(object):
        pass
    python = C_learn()    # python是课程类的对象
    
    class Student(object):
        pass
    alex = Student()      # alex是学生类的对象
    
    alex.course = python  # 组合

三つの特徴

  1. 最初に彼自身を見つけているすべての名前を(コール・メソッドとプロパティ)検索、彼は親を見つけることができませんでした。
  2. そして彼らは、親を持つ親クラスを呼び出したい、その後、スーパー()/クラス名で呼び出すための2つの方法で指定された場合。
  • 継承

    • 親/基本クラス/スーパー

    • サブクラス/派生クラス

    • 単一継承

      • サブクラスは、親クラスを使用することができます
    • 多重継承

      • 順序を探します

        • 深さ優先:PY2
        • 幅優先:PY3
        class A:
            def func(self):
                print('a')
        
        class B(A):
            def func(self):
                print('b')
        
        class C(A):
            def func(self):
                print('c')
        
        class D(B, C):
            def func(self):
                print('d')
        
        obj = D()
        obj.func()
        print(D.mro()) # 查看继承查找顺序
        # Py2查找顺序:DBAC
        # Py3查找顺序: DBCA
      • 新しいクラスとクラシック
        • PY2継承されたオブジェクトのクラスは、新しいクラスで、デフォルトはクラシックです。
        • PY3は新しいクラス、デフォルトのオブジェクトクラスの継承です。
        • 新しいクラス
          • 継承されたオブジェクト
          • スーパーサポートの新しいクラス
          • 多重継承の広さのための優先順位(C3アルゴリズム)
          • そこMRO方法(継承された検索順序を参照してください)
        • クラシック
          • ない継承オブジェクト
          • クラシックはスーパーではありません
          • 多重継承の深さ優先のため
          • いいえMRO方法ありません
  • ポリモーフィズム

    • さまざまな状態によって実証されたクラス
    • アヒルタイプ
  • パッケージ

    • 一般:クラスメンバー
    • 絞り込み:プライベートメンバーを
      • __名前
      • 唯一のクラスの内部で使用するには、我々はまた、サブクラス内で呼び出すことはできません、クラスの外に呼び出すことはできません。
      • 外部強制アクセス:_クラス名の名前__

クラスメンバー

  • クラス変数
  • バインディングのアプローチ
  • 特別メンバー
    • クラスメソッドクラスメソッド
    • 静的メソッドstatcmethod
    • プロパティのプロパティ
  • ダブル/マジックメソッドのメソッド/組み込みメソッド
    • __new__ コンストラクタ
    • __init__ 初期化の方法
    • __call__ このソースコードは、毛で書くのは簡単です
    • __str__
    • __enter____exit__コンテキスト管理で
    • __getitem__ 関係にアクセスするためのブラケット付き
    • __setitem__
    • __delitem__
    • __add__
    • __iter__
    • __dict__

ビルトイン関連の機能

  • オブジェクトとクラス間の関係issinstance
  • クラスとクラスissubclassとの関係
  • タイプクラスタイプ=タイプ(オブジェクト)
  • スーパークラスに見つけるMROために従ってください

おすすめ

転載: www.cnblogs.com/elliottwave/p/12536360.html