第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.プロジェクト開発
- モジュール
- モジュールとは何ですか?
- pyがファイル:プログラマは、ファイルの機能の特定の側面に直接書き込まれています。
- 道のインポート
- インポート
- xxxの輸入XXXから
- パッケージとは何ですか?
- フォルダ:フォルダ内のファイルのPY店複数
- 注意事項
- パッケージの導入、パッケージが実行に相当し
__init__
、ファイル - パッケージがインポートされている場合は、デフォルトのパケット他のモジュールを使用することはできません
- パッケージの導入、パッケージが実行に相当し
仕様
- 項目リスト
ビンプログラムエントリ
モジュールの検索パス
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にインポート設定から設定をインポートモジュール
- student.py
DBデータファイル
LIB拡張子
ログログファイル
- 項目リスト
5.スタックとキュー
- スタックスタック
- LIFOキューlifoqueue(ラストインファーストアウト)
- キューキュー
- FIFOキューfifoqueue(FIFO先入れ先出しで)
6.反射
- インスタンス変数を取得するために、オブジェクトの結合方法
- クラス変数、クラスメソッド、静的メソッドのクラスを取得するには
- モジュール名で任意の変数(共通変数、関数、クラス)モジュールを取得するには
- この文書で、この文書の任意の変数を取得するには
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 # 组合
三つの特徴
- 最初に彼自身を見つけているすべての名前を(コール・メソッドとプロパティ)検索、彼は親を見つけることができませんでした。
- そして彼らは、親を持つ親クラスを呼び出したい、その後、スーパー()/クラス名で呼び出すための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ために従ってください