免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

MMCV 代碼規(guī)范完整指南:PEP 8、命名、docstring、類型注解與 pre-commit 落地實踐

MMCV 代碼規(guī)范完整指南:PEP 8、命名、docstring、類型注解與 pre-commit 落地實踐 人工智能計算機視覺深度學習【免費下載鏈接】mmcvOpenMMLab Computer Vision Foundation項目地址https://gitcode.com/gh_mirrors/mm/mmcv點擊查看免費下載本文是 OpenMMLab 計算機視覺基礎庫 MMCV 的代碼風格官方指南對應倉庫文檔 docs/zh_cn/community/code_style.md的深度展開版。它面向兩類讀者一是準備向 MMCV 提交 Pull Request 的貢獻者需要讓代碼通過 pre-commit、CI 與 reviewer 的審查二是希望在項目內(nèi)建立統(tǒng)一代碼規(guī)范的團隊。讀完本文你將掌握 MMCV 所遵循的 PEP 8 與 Google 風格取舍、命名與 docstring 的具體寫法、類型注解與 mypy 的使用方法以及 pre-commit 工具鏈的完整配置從而寫出與倉庫風格一致、可維護、易審查的 Python 代碼。一、代碼規(guī)范的兩個標準與 MMCV 的取舍1.1 PEP 8 —— Python 官方代碼規(guī)范PEP 8 是 Python 官方的代碼風格指南是 OpenMMLab 算法庫首選的代碼規(guī)范見 docs/zh_cn/community/contributing.md 中代碼風格一節(jié)。它主要覆蓋以下幾方面內(nèi)容代碼布局規(guī)定 Python 中空行、斷行以及導入相關的風格。一個常見疑問是當代碼較長無法在一行內(nèi)寫完時何處可以斷行PEP 8 給出了明確的換行規(guī)則。表達式規(guī)定表達式中空格的使用方式。尾隨逗號當列表較長、無法一行寫下而寫成逐行列表時推薦在末項之后也加上逗號便于后續(xù)追加選項和版本控制對比。尾隨逗號的正反例# Correct: FILES [setup.cfg, tox.ini] # Correct: FILES [ setup.cfg, tox.ini, ] # Wrong: FILES [setup.cfg, tox.ini,] # Wrong: FILES [ setup.cfg, tox.ini ]命名、注釋、類型注解這些內(nèi)容的詳細規(guī)范是本文后續(xù)章節(jié)的主體。1.2 項目內(nèi)一致性優(yōu)先于 PEP 8A style guide is about consistency. Consistency with this style guide is important. Consistency within a project is more important. Consistency within one module or function is the most important.PEP 8 的規(guī)范并不是絕對的項目內(nèi)的一致性要優(yōu)先于 PEP 8 的規(guī)范。OpenMMLab 各個項目都在setup.cfg中設定了代碼規(guī)范設置貢獻者應遵照這些設置。例如 PEP 8 中有如下例子# Correct: hypot2 x*x y*y # Wrong: hypot2 x * x y * y這一規(guī)范本意是指示運算優(yōu)先級但 OpenMMLab 的設置中通常沒有啟用 yapf 的ARITHMETIC_PRECEDENCE_INDICATION選項因而格式規(guī)范工具不會按照該推薦樣式強制格式化一切以項目實際配置為準。打開倉庫根目錄的 setup.cfg 可以看到[yapf] based_on_style pep8 blank_line_before_nested_class_or_def true split_before_expression_after_opening_paren true [isort] line_length 79 multi_line_output 0 extra_standard_library pkg_resources,setuptools,logging,os,warnings,abc known_first_party mmcv known_third_party addict,cv2,matplotlib,numpy,onnx,packaging,pytest,pytorch_sphinx_theme,scipy,sphinx,torch,torchvision,yaml,yapf no_lines_before STDLIB,LOCALFOLDER default_section THIRDPARTY這些配置說明yapf 基于 pep8 風格isort 的每行長度限制為 79 字符mmcv被標記為 first party而 torch、numpy 等被標記為 third party導入順序會自動按標準庫 → 第三方 → 本地模塊排列。1.3 Google 開源項目風格指南Google 開源項目風格指南Google Python Style Guide比 PEP 8 提供了更詳盡的指導包含語言規(guī)范和風格規(guī)范兩個部分語言規(guī)范對 Python 中許多語言特性異常、Lambda 表達式、列表推導式、metaclass 等進行優(yōu)缺點分析并給出使用意見。風格規(guī)范大部分約定建立在 PEP 8 基礎上同時有更細的約定如函數(shù)長度、TODO 注釋、文件與 socket 對象的訪問等。MMCV 推薦將 Google 指南作為開發(fā)參考但不必嚴格遵照原因有二該指南存在 Python 2 兼容需求例如要求所有無基類的類顯式繼承object而在僅使用 Python 3 的環(huán)境中這一要求不必要按本項目慣例即可OpenMMLab 項目作為框架級開源軟件不必對高級技巧過于避諱尤其是 MMCV但使用這些技巧前應認真考慮是否真的有必要并尋求其他開發(fā)者的廣泛評估。需要特別留意的一處差異是包的導入Google 指南要求導入本地包時使用路徑全稱且每個模塊單獨成行。這在 MMCV 中通常不必要也不符合項目開發(fā)慣例本項目約定如下# Correct from mmcv.cnn.bricks import (Conv2d, build_norm_layer, DropPath, MaxPool2d, Linear) from ..utils import ext_loader # Wrong from mmcv.cnn.bricks import Conv2d, build_norm_layer, DropPath, MaxPool2d, \ Linear # 使用括號進行連接而不是反斜杠 from ...utils import is_str # 最多向上回溯一層過多的回溯容易導致結(jié)構混亂要點跨行導入用括號連接而非反斜杠相對導入最多向上回溯一層避免結(jié)構混亂。1.4 OpenMMLab 的落地pre-commit 自動格式化OpenMMLab 項目使用 pre-commit 工具自動格式化代碼具體安裝與使用見 docs/zh_cn/community/contributing.md 的配置 pre-commit與代碼風格章節(jié)。核心命令如下須在 MMCV 目錄下執(zhí)行pip install -U pre-commit pre-commit install pre-commit run --all-files中國用戶若因網(wǎng)絡問題安裝失敗可使用國內(nèi)鏡像配置pre-commit install -c .pre-commit-config-zh-cn.yaml pre-commit run --all-files -c .pre-commit-config-zh-cn.yaml倉庫根目錄的 .pre-commit-config.yaml 是本項目實際的鉤子配置包含以下工具鏈鉤子作用flake8Python 官方推薦的代碼規(guī)范檢查工具是多個檢查工具的封裝isort自動調(diào)整模塊導入順序yapfGoogle 發(fā)布的代碼格式化工具trailing-whitespace / mixed-line-ending / end-of-file-fixer去除行尾空白、統(tǒng)一行尾符LF、修復文件末尾換行check-yaml / check-merge-conflict校驗 YAML 語法、檢查未解決的合并沖突requirements-txt-fixer調(diào)整requirements.txt中包的順序double-quote-string-fixer / fix-encoding-pragma / pyupgrade統(tǒng)一引號、移除編碼聲明、升級為 Python 3 語法codespell檢查單詞拼寫mdformat檢查并格式化 Markdown 文件配合 mdformat-openmmlabdocformatter格式化 docstring--in-place --wrap-descriptions 79check-copyright檢查文件版權頭針對 mmcv、tests排除 mmcv/opsmypy靜態(tài)類型檢查排除 tests 與 docs 目錄其中 C 和 CUDA 代碼遵循 Google C Style Guideclang-format 鉤子在配置中以注釋形式預留。如果提交的代碼不符合代碼風格規(guī)范pre-commit 會發(fā)出警告并自動修復部分錯誤若想臨時繞開檢查可在git commit時加上--no-verify僅用于臨時提交最終推送的代碼必須通過 pre-commit 檢查。二、命名規(guī)范2.1 命名規(guī)范的重要性優(yōu)秀的命名是良好代碼可讀性的基礎?;A命名規(guī)范對各類變量做約束使讀者能根據(jù)名字判斷它是一個類、局部變量還是全局變量而優(yōu)秀的命名則要求作者對變量功能有清晰認識與良好表達能力讓讀者僅憑名稱即可理解其含義。2.2 基礎命名規(guī)范類型公有私有模塊lower_with_under_lower_with_under包lower_with_under類CapWords_CapWords異常CapWordsError函數(shù)方法lower_with_under_lower_with_under函數(shù) / 方法參數(shù)lower_with_under全局 / 類內(nèi)常量CAPS_WITH_UNDER_CAPS_WITH_UNDER全局 / 類內(nèi)變量lower_with_under_lower_with_under變量lower_with_under_lower_with_under局部變量lower_with_under注意盡量避免變量名與保留字沖突若不可避免可使用一個后置下劃線如class_盡量不要使用過于簡單的命名約定俗成的循環(huán)變量i、文件變量f、錯誤變量e除外不會被用到的變量可命名為_邏輯檢查器會將其忽略。2.3 命名技巧良好的變量命名需保證三點含義準確、沒有歧義長短適中前后統(tǒng)一。# Wrong class Masks(metaclassABCMeta): # 命名無法表現(xiàn)基類Instance or Semantic pass # Correct class BaseInstanceMasks(metaclassABCMeta): pass # Wrong不同地方含義相同的變量盡量用統(tǒng)一的命名 def __init__(self, inplanes, planes): pass def __init__(self, in_channels, out_channels): pass常見的函數(shù)命名方法動賓命名法crop_img,init_weights動賓倒置命名法imread,bbox_flip注意函數(shù)命名與參數(shù)的順序保證主語在前、符合語言習慣check_keys_exist(key, container)check_keys_contain(container, key)還要避免非常規(guī)或未統(tǒng)一約定的縮寫如nb→num_blocksin_nc→in_channels。三、docstring 規(guī)范3.1 為什么要寫 docstringdocstring 是對一個類、一個函數(shù)功能與 API 接口的詳細描述有兩個功能幫助其他開發(fā)者了解代碼功能方便 debug 和復用代碼在 Readthedocs 文檔中自動生成相關 API reference 文檔幫助不了解源代碼的社區(qū)用戶使用功能。3.2 如何寫 docstring與普通注釋不同規(guī)范的 docstring 有嚴格的格式要求以便 Python 解釋器與 sphinx 進行文檔解析docstring 的基本約定見 PEP 257。MMCV 參考格式為 Google 風格同時結(jié)合了 OpenMMLab 自身慣例。以下按模塊、類、方法三種場景給出標準格式。1. 模塊文檔代碼風格規(guī)范推薦為每個模塊Python 文件編寫 docstring但目前 OpenMMLab 項目大部分沒有此類 docstring因此不做硬性要求。參考格式A one line summary of the module or program, terminated by a period. Leave one blank line. The rest of this docstring should contain an overall description of the module or program. Optionally, it may also contain a brief description of exported classes and functions and/or usage examples. Typical usage example: foo ClassFoo() bar foo.FunctionBar() 2. 類文檔類文檔是貢獻者最常編寫的類型。按照 OpenMMLab 慣例這里使用了與 Google 風格不同的寫法不使用 Attributes 描述類屬性而是使用 Args 描述__init__函數(shù)的參數(shù)。Args 中遵照parameter (type): Description.格式描述每個參數(shù)的類型與功能多種類型可用(float or str)寫法可以為 None 的參數(shù)寫為(int, optional)。class BaseRunner(metaclassABCMeta): The base class of Runner, a training helper for PyTorch. All subclasses should implement the following APIs: - run() - train() - val() - save_checkpoint() Args: model (:obj:torch.nn.Module): The model to be run. batch_processor (callable, optional): A callable method that process a data batch. The interface of this method should be batch_processor(model, data, train_mode) - dict. Defaults to None. optimizer (dict or :obj:torch.optim.Optimizer, optional): It can be either an optimizer (in most cases) or a dict of optimizers (in models that requires more than one optimizer, e.g., GAN). Defaults to None. work_dir (str, optional): The working directory to save checkpoints and logs. Defaults to None. logger (:obj:logging.Logger): Logger used during training. Defaults to None. (The default value is just for backward compatibility) meta (dict, optional): A dict records some import information such as environment info and seed, which will be logged in logger hook. Defaults to None. max_epochs (int, optional): Total training epochs. Defaults to None. max_iters (int, optional): Total training iterations. Defaults to None. def __init__(self, model, batch_processorNone, optimizerNone, work_dirNone, loggerNone, metaNone, max_itersNone, max_epochsNone): ...補充要求在算法實現(xiàn)的主體類中建議加入原論文鏈接如果參考了其他開源代碼實現(xiàn)應加入modified from直接復制了其他代碼庫實現(xiàn)則應加入copied from并注意源碼的 License如有必要可通過.. math::加入數(shù)學公式。# 參考實現(xiàn) # This func is modified from detectron2 # ..._. # 復制代碼 # This code was copied from the ubelt # library..._. # 引用論文 添加公式 class LabelSmoothLoss(nn.Module): rInitializer for the label smoothed cross entropy loss. Refers to Rethinking the Inception Architecture for Computer Vision ..._. This decreases gap between output scores and encourages generalization. Labels provided to forward can be one-hot like vectors (NxC) or class indices (Nx1). And this accepts linear combination of one-hot like labels from mixup or cutmix except multi-label task. Args: label_smooth_val (float): The degree of label smoothing. num_classes (int, optional): Number of classes. Defaults to None. mode (str): Refers to notes, Options are original, classy_vision, multi_label. Defaults to classy_vision. reduction (str): The method used to reduce the loss. Options are none, mean and sum. Defaults to mean. loss_weight (float): Weight of the loss. Defaults to 1.0. Note: if the mode is original, this will use the same label smooth method as the original paper as: .. math:: (1-\epsilon)\delta_{k, y} \frac{\epsilon}{K} where :math:\epsilon is the label_smooth_val, :math:K is the num_classes and :math:\delta_{k,y} is Dirac delta, which equals 1 for ky and 0 otherwise. if the mode is classy_vision, this will use the same label smooth method as the facebookresearch/ClassyVision ..._ repo as: .. math:: \frac{\delta_{k, y} \epsilon/K}{1\epsilon} if the mode is multi_label, this will accept labels from multi-label task and smoothing them as: .. math:: (1-2\epsilon)\delta_{k, y} \epsilon 注意 reStructuredText 中三種引號功能不同here雙反引號表示一段代碼here單反引號表示斜體here雙引號無特殊含義一般表示字符串。其中單反引號的用法與 Markdown 不同需要多加留意。另外還有:obj:type 這種更規(guī)范的表示類的寫法鑒于長度不做特別要求一般僅用于表示非常用類型。3. 方法函數(shù)文檔函數(shù)文檔與類文檔結(jié)構基本一致但需要加入返回值文檔。對于較復雜的函數(shù)和類可使用Examples字段加入示例如果需要給參數(shù)加入較長備注可加入Note字段。示例最好能直接在 Python 交互式環(huán)境中運行并給出對應結(jié)果多個示例可用注釋分隔說明。def import_modules_from_strings(imports, allow_failed_importsFalse): Import modules from the given list of strings. Args: imports (list | str | None): The given module names to be imported. allow_failed_imports (bool): If True, the failed imports will return None. Otherwise, an ImportError is raise. Defaults to False. Returns: List[module] | module | None: The imported modules. All these three lines in docstring will be compiled into the same line in readthedocs. Examples: osp, sys import_modules_from_strings( ... [os.path, sys]) import os.path as osp_ import sys as sys_ assert osp osp_ assert sys sys_ ...如果函數(shù)接口在某個版本發(fā)生了變化需要在 docstring 中加入說明必要時添加Note或Warningclass CheckpointHook(Hook): Save checkpoints periodically. Args: out_dir (str, optional): The root directory to save checkpoints. If not specified, runner.work_dir will be used by default. If specified, the out_dir will be the concatenation of out_dir and the last level directory of runner.work_dir. Defaults to None. Changed in version 1.3.15. file_client_args (dict, optional): Arguments to instantiate a FileClient. See :class:mmcv.fileio.FileClient for details. Defaults to None. New in version 1.3.15. Warning: Before v1.3.15, the out_dir argument indicates the path where the checkpoint is stored. However, in v1.3.15 and later, out_dir indicates the root directory and the final path to save checkpoint is the concatenation of out_dir and the last level directory of runner.work_dir. Suppose the value of out_dir is /path/of/A and the value of runner.work_dir is /path/of/B, then the final path will be /path/of/A/B. 如果參數(shù)或返回值里帶有需要展開描述字段的 dict應采用如下格式def func(x): r Args: x (None): A dict with 2 keys, padded_targets, and targets. - targets (list[Tensor]): A list of tensors. Each tensor has the shape of :math:(T_i). Each element is the index of a character. - padded_targets (Tensor): A tensor of shape :math:(N). Each item is the length of a word. Returns: dict: A dict with 2 keys, padded_targets, and targets. - targets (list[Tensor]): A list of tensors. Each tensor has the shape of :math:(T_i). Each element is the index of a character. - padded_targets (Tensor): A tensor of shape :math:(N). Each item is the length of a word. return x3.3 docstring 與 readthedocs 渲染為了生成 readthedocs 文檔docstring 需要按照 reStructuredText 文檔格式編寫否則會產(chǎn)生文檔渲染錯誤。在提交 PR 前最好生成并預覽文檔效果方法見 docs/zh_cn/community/contributing.md 的文檔渲染指引pip install -r requirements/docs.txt cd docs/zh_cn/ # or docs/en make html # check file in ./docs/zh_cn/_build/html/index.html語法規(guī)范參考 reStructuredText PrimerSphinx 官方文檔與 Example Google Style Python Docstringssphinxcontrib-napoleon 文檔。OpenMMLab 使用 pytorch_sphinx_theme 與 napoleon 擴展見 requirements/docs.txt 與 docs/zh_cn/conf.py將上述 Google 風格的 docstring 自動渲染為 API reference 頁面如 docs/zh_cn/api/ 下各模塊的 .rst 文件。四、注釋規(guī)范4.1 為什么要寫注釋對于一個開源項目團隊合作以及社區(qū)之間的合作必不可少因此尤其要重視合理注釋。不寫注釋的代碼可能過幾個月連作者自己也難以理解造成額外的閱讀和修改成本。4.2 如何寫注釋最需要寫注釋的是代碼中技巧性的部分。如果你在下次代碼審查的時候必須解釋一下那么你應該現(xiàn)在就給它寫注釋。對于復雜的操作應該在其操作開始前寫上若干行注釋對于不是一目了然的代碼應在其行尾添加注釋。Google 開源項目風格指南# We use a weighted dictionary search to find out where i is in # the array. We extrapolate position based on the largest num # in the array and the array size and then do binary search to # get the exact number. if i (i-1) 0: # True if i is 0 or a power of 2.兩條硬性規(guī)則為了提高可讀性注釋應至少離開代碼2 個空格絕不要描述代碼。假設閱讀代碼的人比你更懂 Python他只是不知道你的代碼要做什么。Google 開源項目風格指南# Wrong: # Now go through the b array and make sure whenever i occurs # the next element is i1 # Wrong: if i (i-1) 0: # True if i bitwise and i-1 is 0.在注釋中可以使用 Markdown 語法開發(fā)人員通常熟悉 Markdown便于交流理解如用單反引號表示代碼和變量——注意不要與 docstring 中的 reStructuredText 語法混淆# _reversed_padding_repeated_twice is the padding to be passed to # F.pad if needed (e.g., for non-zero padding types that are # implemented as two ops: padding conv). F.pad accepts paddings in # reverse order than the dimension. self._reversed_padding_repeated_twice _reverse_repeat_tuple(self.padding, 2)4.3 注釋示例代碼風格文檔給出了兩類典型注釋場景復雜邏輯結(jié)構對優(yōu)先級關系進行說明。例如 registry 構建函數(shù)的選擇邏輯# self.build_func will be set with the following priority: # 1. build_func # 2. parent.build_func # 3. build_from_cfg if build_func is None: if parent is not None: self.build_func parent.build_func else: self.build_func build_from_cfg else: self.build_func build_funcbug 修復的特殊處理附帶相關 issue 鏈接幫助其他人了解 bug 背景。例如 checkpoint 保存時針對 PyTorch 1.6 文件格式變更的兼容處理def _save_ckpt(checkpoint, file): # The 1.6 release of PyTorch switched torch.save to use a new # zipfile-based file format. It will cause RuntimeError when a # checkpoint was saved in high version (PyTorch version1.6.0) but # loaded in low version (PyTorch version1.6.0). More details at # https://github.com/open-mmlab/mmpose/issues/904 if digit_version(TORCH_VERSION) digit_version(1.6.0): torch.save(checkpoint, file, _use_new_zipfile_serializationFalse) else: torch.save(checkpoint, file)五、類型注解5.1 為什么要寫類型注解類型注解是對函數(shù)中變量的類型做限定或提示為代碼的安全性提供保障、增強可讀性、避免出現(xiàn)類型相關的錯誤。Python 對類型沒有強制限制類型注解只起提示作用IDE 會解析注解并在調(diào)用代碼時給出類型提示類型注解檢查工具如 mypy則會根據(jù)注解對代碼中可能出現(xiàn)的問題進行檢查減少 bug 的出現(xiàn)。通常不需要注釋模塊中的所有函數(shù)按以下原則權衡公共的 API 需要注釋在代碼的安全性、清晰性和靈活性之間權衡是否注釋對于容易出現(xiàn)類型相關錯誤的代碼進行注釋難以理解的代碼請進行注釋若代碼中的類型已經(jīng)穩(wěn)定可以進行注釋。對于一份成熟的代碼多數(shù)情況下即使注釋了所有函數(shù)也不會喪失太多靈活性。5.2 函數(shù) / 方法類型注解通常不對self和cls注釋。根據(jù)行寬有多種寫法from typing import Optional, List, Tuple # 全部位于一行 def my_method(self, first_var: int) - int: pass # 另起一行 def my_method( self, first_var: int, second_var: float) - Tuple[MyLongType1, MyLongType1, MyLongType1]: pass # 單獨成行具體的應用場合與行寬有關建議結(jié)合 yapf 自動化格式使用 def my_method( self, first_var: int, second_var: float ) - Tuple[MyLongType1, MyLongType1, MyLongType1]: pass # 引用尚未被定義的類型 class MyClass: def __init__(self, stack: List[MyClass]) - None: pass類型注解中的類型可以是 Python 內(nèi)置類型、自定義類也可以使用typing提供的 wrapper 類進行裝飾。常用注解# 數(shù)值類型 from numbers import Number # 可選類型指參數(shù)可以為 None from typing import Optional def foo(var: Optional[int] None): pass # 聯(lián)合類型指同時接受多種類型 from typing import Union def foo(var: Union[float, str]): pass from typing import Sequence # 序列類型 from typing import Iterable # 可迭代類型 from typing import Any # 任意類型 from typing import Callable # 可調(diào)用類型 from typing import List, Dict # 列表和字典的泛型類型 from typing import Tuple # 元組的特殊格式 # 雖然在 Python 3.9 中l(wèi)ist, tuple 和 dict 本身已支持泛型但為了支持之前的版本 # 我們在進行類型注解時還是需要使用 List, Tuple, Dict 類型 # 另外在對參數(shù)類型進行注解時盡量使用 Sequence Iterable Mapping # List, Tuple, Dict 主要用于返回值類型注解5.3 變量類型注解一般用于難以直接推斷類型時# Recommend: 帶類型注解的賦值 a: Foo SomeUndecoratedFunction() a: List[int]: [1, 2, 3] # List 只支持單一類型泛型可使用 Union b: Tuple[int, int] (1, 2) # 長度固定為 2 c: Tuple[int, ...] (1, 2, 3) # 變長 d: Dict[str, int] {a: 1, b: 2} # Not Recommend行尾類型注釋 # 雖然這種方式被寫在了 Google 開源指南中但這是一種為了支持 Python 2.7 版本 # 而補充的注釋方式鑒于我們只支持 Python 3, 為了風格統(tǒng)一不推薦使用這種方式。 a SomeUndecoratedFunction() # type: Foo a [1, 2, 3] # type: List[int] b (1, 2, 3) # type: Tuple[int, ...] c (1, 2, 3.5) # type: Tuple[int, Text, float]5.4 自定義泛型除了使用typing內(nèi)置的List、Dict泛型也可以利用TypeVar和Generic定義自己的泛型from typing import TypeVar, Generic KT TypeVar(KT) VT TypeVar(VT) class Mapping(Generic[KT, VT]): def __init__(self, data: Dict[KT, VT]): self._data data def __getitem__(self, key: KT) - VT: return self._data[key]使用上述方法定義了一個擁有泛型能力的映射類mapping Mappingstr, float value: float example[a]另外可以利用TypeVar在函數(shù)簽名中指定聯(lián)動的多個類型from typing import TypeVar, List T TypeVar(T) # Can be anything A TypeVar(A, str, bytes) # Must be str or bytes def repeat(x: T, n: int) - List[T]: Return a list containing n references to x. return [x]*n def longest(x: A, y: A) - A: Return the longest of two strings. return x if len(x) len(y) else y5.5 mypy類型注解檢查工具mypy 是一個 Python 靜態(tài)類型檢查工具。它會根據(jù)類型注解檢查傳參、賦值等操作是否符合注解從而避免可能出現(xiàn)的 bug。考慮如下腳本test.pydef foo(var: int) - float: return float(var) a: str foo(2.0) b: int foo(3.0) # type: ignore運行mypy test.py得到test.py:4: error: Incompatible types in assignment (expression has type float, variable has type int) test.py:4: error: Argument 1 to foo has incompatible type str; expected int Found 2 errors in 1 file (checked 1 source file)輸出分別指出了第 4 行在函數(shù)調(diào)用參數(shù)和返回值賦值兩處的類型錯誤第 5 行同樣存在兩處類型錯誤但因為使用了type: ignore而被忽略——只有部分特殊情況才需要此類忽略。MMCV 在提交代碼時要求補充類型注解并通過 mypy 檢查mypy 鉤子已配置在 .pre-commit-config.yaml 中排除了 tests 與 docs 目錄。六、提交 PR 前的代碼規(guī)范自查清單結(jié)合 docs/zh_cn/community/contributing.md 與 docs/zh_cn/community/pr.md向 MMCV 提交代碼前應完成以下檢查pre-commit 檢查在 MMCV 目錄下執(zhí)行pre-commit run --all-files確保 flake8、yapf、isort、mdformat、docformatter、codespell、mypy 等鉤子全部通過若鉤子安裝被網(wǎng)絡中斷可重復執(zhí)行pre-commit run ...繼續(xù)安裝單元測試pytest tests通過全量測試至少保證修改模塊的測試通過例如pytest tests/test_utils/test_env.py可用python -m coverage run -m pytest /path/to/test_file python -m coverage html檢查覆蓋率查看htmlcov/index.html文檔渲染若修改/新增了 docstring 或文檔安裝pip install -r requirements/docs.txt后在docs/zh_cn/或docs/en/下執(zhí)行make html確認 reStructuredText 語法渲染無誤檢查docs/zh_cn/_build/html/index.html代碼風格Python 遵循 PEP 8 并遵循本文全部規(guī)范C 與 CUDA 遵循 Google C Style GuidePR 粒度與描述一個 PR 只做一件事粒度要細標題格式為[Prefix] Short description (Suffix)前綴包括[Feature]新功能、[Fix]修 bug、[Docs]文檔、[WIP]開發(fā)中描述中說明修改理由、修改內(nèi)容與影響并關聯(lián)相關 Issue。遵守這套規(guī)范既能保證你的代碼與 MMCV 現(xiàn)有代碼庫高度一致也能讓代碼在 Readthedocs 上正確渲染為 API 文檔惠及所有社區(qū)用戶。贊分享人工智能計算機視覺深度學習【免費下載鏈接】mmcvOpenMMLab Computer Vision Foundation項目地址https://gitcode.com/gh_mirrors/mm/mmcv點擊查看免費下載相關推薦QUANTAXIS Python 代碼規(guī)范完全指南PEP 8、類型注解、命名規(guī)范與質(zhì)量工具實戰(zhàn)QUANTAXIS Python 代碼規(guī)范完全指南PEP 8、類型注解、命名規(guī)范與質(zhì)量工具實戰(zhàn) 本文依據(jù)倉庫文檔 doc/development/code s金融科技后端數(shù)據(jù)分析DeepChem 開發(fā)規(guī)范指南從 pre-commit 到類型注解的完整代碼質(zhì)量保障體系DeepChem 開發(fā)規(guī)范指南從 pre commit 到類型注解的完整代碼質(zhì)量保障體系 本篇技術指南以 DeepChem 官方開發(fā)文檔中的 Coding C人工智能深度學習機器學習生物信息學科學計算Python 3編碼規(guī)范與最佳實踐PEP 8完全解讀指南Python 3編碼規(guī)范與最佳實踐PEP 8完全解讀指南 想要寫出專業(yè)、易讀且符合行業(yè)標準的Python代碼嗎掌握PEP 8編碼規(guī)范是每個Python開發(fā)者文檔教程上一篇告別氣候數(shù)據(jù)處理困境用sqlx構建高效驗證案例數(shù)據(jù)庫下一篇gh_mirrors/ove/overleaf代碼審查流程PR規(guī)范與自動化檢查創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99激情在线| 密视AV综合在线| 99re久久| 99精彩视频| 五月丁香大相交| www.色婷婷。com| 激情综合五| 色,激情五月天| 天天操人人干| 五月婷婷六月爱| 午夜69成人做爰视频| ri电影在线| 国产精品a无线| 色综合激情| 99国产视频网| 99热国内精品| WWW.桔色成人.COM| 婷婷中文综合网| 久久久久久草黄色片AV在线观看| 久久婷婷九月国产精品| 九九激情视频| 久久资源网五月婷| 婷婷五月天久久久| 丁香婷婷浪潮AV久久综合| 色狠狠色综合久久久绯色AⅤ影视| 99在线观看视频| 丁香五月成人| 丁香五月婷婷五月基地| 另类激情五月| 79亚洲精品少妇| 粉嫩AV久久一区二区三区| 激情婷婷丁香色五月综合| 色婷婷丁香五月| 开心五月婷婷六月丁香| www.精品久9| 九九99九九99九九99视频网| 久久人妻爱爱| 亚洲电影在线观看| 久久99综合网| 99热婷婷| 热久久婷婷| 亚洲狠狠干| 97干在线观看视频| 日本色99网站| 色婷婷综合五月| 天天日日| 人人摸人人摸| 激情五月丁香六月| Www99热| 天天影院色| 天天热夜夜操| 激情五月天色| 涩涩婷婷五月| 俺去也五月天| 五月婷婷丁香| 99热这里只有精品中文字幕| 丁香五月成人论坛| 九九热这里只有精品31| 99A片| 直接看的AV网站| 丁香婷婷人妻综合网| 开心五月婷婷五月| 婷婷五月天激情综合| 大香蕉婷婷| 超碰成人电影| AV五月丁香| 色爱综合视频| 久久婷婷色五月| 2w在线视频| 一起草av| 天天操天天操天天操天天操天天操 | 久久日韩婷婷五月| 免费三级黄色| 操一操干一干| 色在线99| 思思热AV| 热无码A∨| 色九九九九| 99热热热99精品丁香| 婷婷六月久久综合导航| 丁香色六月婷婷| 色五月婷婷激情基地| 五月天综合网| 婷婷五月激情网| 日韩AAA| 九九99九九99偷拍视频免费看| 狠狠爱深色婷婷综合| 色五狠狠| 66精品成人免费网站在线观看| 99热精品在线| 五月激情婷婷综合| 亚洲天堂碰碰婷婷| 91大屁股在线| 国精产品一区一区三区免费视频| 欧美在线视频99| 99久久66综合| h在线看免费版在线看| 色五婷婷在线视频| www.五月丁香| 丁香五月播播| 天天天综合网| 午夜激情五月天| 亚洲综合九九| 另类 在线| 亚洲无码影音| 亚洲精品字幕| 丁香香蕉射射射| 色婷婷丁香五月| 色丁香五月天婷婷| 婷婷五月天香蕉| 乱女乱妇熟女熟妇综合网站| 五月色情婷婷开心五月天| 成人片在线播放| 超碰97色| 香蕉伊人综合| 1024婷婷综合久久五月天| 91黄色五月天视频| 韩日AV片| 色婷婷在线影院| 狠狠精品干练久久久无码中文字幕| 九九这里有精品| 99综合一区| 久久色亭亭五月天| 五月丁香久久综合| 亚洲激情图文小说| 色播播之激情五月婷婷| 思思w99| 色视频2025| 久热久| 51成人| 久久综合综合综合| 婷婷激情综合色五月久久91| 99热销国产这里有精品| 丁香激情网| 超碰人人91| 五月丁香免费看| 久久一级免费黄色片| http://www.lingjunshare.com/| 激情av| 日本婷久久| 日韩爱操视频| 日韩成人电影Av| 人人舔人人色人人高潮| 色色色网站| 99久.| 五月婷导航| 丁香五月天激情网址| 国产婷婷色综合AV蜜臀AV| 色很很96| 久久99久久99www| 久99热在线观看| 精品九九视频| 久久久.COM| 午夜亚洲国产精品av一区二区| 久去色色| 少妇人妻综合色6699| www.99热| 激情AV| 激情婷婷五月久久| xxxx五月激情| 色射婷婷五月天| 开心激情播播五月天| 天天摸天天舔天天天天爽| 五月天婷婷AV| 性爱视频久久| 精品久9| 久99久视频精选| 激情综合国产| 婷婷六月激情丁香| 色婷婷免费观看| www色色色com| 97久久五月丁香婷婷| 九九久久精品| 五月婷婷之婷婷| 九九精品99| 五月丁香网站| 五月天婷婷香蕉狠狠超碰综合| 美女丁香五月天| 婷婷五月天在线观看免费| 天天操无码| 大地9中文在线观看免费高清 | 五月天伊人av| 99啪啪网| 亚洲激情四射色| 91九色小视频| 欧美色色色色色色色| av九九| 五月婷A V在线| 超碰com| 全国最新疫情| 色五月婷婷五月| 97久久综合网| 婷婷综合网在线| 久久五月天网| 91在线人| 婷婷综合成人五月天| 97丁香五月| 婷婷五月花| 殴美激情综合网| 五月天小说激情| 神马欧美精| 激情婷婷| 欧美色婷婷| 色五开心五月五月深深爱| 丁香六月在线| 亚洲视频操| 婷婷丁香五月天亚洲| 超碰免费在线| 六月婷婷综合激情| 99久久网站| 成人国产欧美大片一区| 狠狠色狠狠干| 五月婷婷AV| 特黄三级又爽又粗又大| 五月综合婷婷久久在线| 中文字幕欧美日韩VA免费视频| 婷婷色吧| 丁香在线视频| 天天艹| 丁香婷婷射| 99啪啪| 色婷婷影| 99热精品在线在线| 99热很操老逼| 国产午夜一区二区三区| 成人性生活免费观看。| 伊人丁香花综合影院| 99热久| 色五月婷婷91| 久久久人妻| 成人AV片播放| 武汉美女啪啪视频免费一级片| 亚洲九区| 综合激情五月四射婷婷| 99视频精品在线| 97色色婷婷五月天| 丁香五月色色| 99re在线观看| 99热色精品| 日本啪啪网| 色综合另类| 开心五月婷婷伊人| 精品A√| 91色性感五月婷婷丁香| 深爱激情网五月天| 亚洲在线成人| 色婷久| 五月婷婷精品| 五月丁香色婷婷色| 9操在线| 99热只有| 91碰| 五月激情小说| 人妻videos人妻高清| 欧美大肥婆大肥BBBBB| 99热大全在线观看| 成人免费120分钟啪啪| 综合久色五月| 91丨九色丨国产| 激情综合六月| 青青日韩| 91精品久久久久久| www色婷婷久久综合久色 | 久青青久| 日99网站| 欧美人人草| 丁香花操逼| 丁香五月激情在线| 2020日日干| 99狠狠操一| 26uuu精品一区二区| 人人摸人人操人人爽| 色婷婷欧美| 亚洲热视频在线| 狠狠做六月爱婷婷综合aⅴ| 欧美成人精品A片免费一区99| 五月天激情综合首页| 久久香蕉影院| 丁香月六月| 99碰视频| www.五月丁香| 岛国av电影网站| 婷婷香蕉香| 狠狠干,狠狠操| 激情九月综合| 日日躁夜夜躁狠狠久久AV| 99精品7| 国产人人操| 五月天成人综合| 人人操97| 成人国产欧美大片一区| 激情六月色| 久久色五月| 婷婷五月天伊人网| 天天做天天爱综合| 综合久| 欧美韩国日本| 能看的AV| 五月婷免费视频久久久| 五月丁香最新| 99免费视频| 深爱激情av| 六月激情网| 五月丁香婷婷综合久久| 少妇口诉沐足视频播放器网址| 日操熟女| 色色色色色色色色综合网| 激情网狠狠干| 4399人妻无码久久久| 丁香六月婷婷| 六月丁香五月天| 五月婷婷色影院| 欧美韩国日本| 久久久久亚洲AV无码网影音先锋| 日韩av干| 8区视频在线| 成人精品视频99在线观看免费| 91精品综合久久久久久五月丁香| 九月丁香婷婷综合激情| 2021日韩无码| 国产看真人毛片爱做A片| 婷婷综合精品视频97| 中文无码婷婷| 精品无码片| 大香蕉五月丁香| 久色五月婷婷综合| 91色久| 99在线资源视频| 玖玖综合色| 99热这里只有精品2024| 国产韩日亚洲美州欧亚综合在线| 日韩婷久| 中文字幕有多少字| 婷婷丁香五月激情| 天天干天天干天天干| 月婷婷亚洲| 婷婷五月天AV在线| 色综合婷婷99| 久久er99热精品一区二区| 丁香五月天视频| 婷婷大美在线| 香蕉久久国产AV一区二区| 最新国产AV| 996er热| 亚洲六月婷婷| 另类激情网| 激情四射五月天偷偷看婷婷| 丁香久久综合| 一区二区三区XXXXXX| 日本精品人妻无码77777| 色色色婷婷五月天| 丁香婷婷视频在线| 天天色综合网1| 日本熟女视频一区二区| 91AV婷婷| 丁香六月婷婷综合啪啪| 2005天天干天天1| 欧美性生交XXXXX无码小说| 色噜噜狠狠色综合成人网| 亚洲最大五月天成人网| www.丁香黄色五月天人与| 五月综合色| 99视频91| 人人操91色| 九九99久久精品| 99精品在线| 人人摸人人| 午夜色丁香| 初夜av| WWW,激情五月天,COM| 秋霞AV淫| 成人视频在线免费播放| 日韩黄色AV无码| 婷婷中文字幕网站| se色婷婷视频| 2025超碰| 五月天色小说| 久爱综合| 操精品9| 国产,欧美,学生妹,视频| 激情AV| 99色网站| 久久99视频| AV九九| yellow视频在线观看91| 嫩草视频在线观看| 九九aV| 九九综合九九| 色色色色五月| 五月激情天| 99热8| 涩综合婷婷| 五月天色色网站| 99久热在线精品| 99亚洲视频| 五月天婷婷色| 成人短视频在线| 精品婷婷| 激情视频网址| 9国产在线视频| 欧美性猛交99久久久久99按摩| 五月综合视频| 综合aV在线| 精品亚洲国产成AV人片传媒| 在线观看日韩12345区| 丁香五月婷婷激情97| 97久久婷婷色| www.五月婷| 久9精品| 91九色中文字幕女在线观看| 99热综合| 欧美天天干五月丁香| 2020久久婷婷五月| 五月天激情社区| 九九性视频| 六月丁香婷婷综合在线| www久久99| 可以直接看的av| 夜夜操狠狠操| 亚洲成人日韩无码精品| 丁香五月婷婷天堂大香蕉| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 伊人五月天在线| 99在线免费视频| 91婷婷在线| 79精品视频在线观看,| 精品色色| 97碰操| 五月天丁香综合在线| 大香蕉五月婷婷| 日本高清久久| 九热视频这里只有精品| 欧美影院| 激情AV| 男女啪啪视频久 9| 婷婷丁香久久| 五月丁香啪啪啪| 免费碰碰视频久| 色欲婷婷五月天丁香| 久久婷婷五月天懂色| 人人操Av| 夜夜撸夜夜骑| 开心五月婷婷| 操逼巨乳91| 性爱AV天堂| 丁香六月激情蜜桃| 变态另类9| A片试看120分钟做受视频红杏 | 婷婷丁香成人五月天| 亚洲综人色综网| 亚洲第一视频 久久| 日韩色五月| 激情五月婷婷| 丁香五月激情综合婷综| 欧美婷婷五月激情| 在线视频99| 五月天婷婷成人网| 超碰国产av| 天天摸天天爽| 亚洲激情综| 国产古装妇女野外A片| 午夜福利8055| 久久婷婷五月草视频在线播放| 噜噜色婷婷| 天天弄天天操| 97婷婷在线| 91 久热| 天天摸天天肏| 日日夜夜爽| 人妻操逼视频| 欧美网站视频4399| 色五月婷婷啪啪五月| 日本视频99| 一区二区三区四日本| 天堂色婷婷| 五月丁香六月婷婷亚洲| 五月天激情丁香| 综久久久| 日操五月婷| 在线观看的av| 国产永久一黄| 九九这里精品| 婷婷综合网| 欧美三日本三级少妇三99| 五月婷婷丁香在线视频| 国产成人网站在线观看| 9久热免费视频99| 久久机热思思热| 大香蕉五月天| 色色丁香婷婷| 色色热| 大香蕉福利导航| 五月激情丁香五月| 欧美丁香五月97色| 国精产品一区二区三区| 五月亭亭综合五码| 丰满少妇猛烈A片免费看观看| 91九色国产| 五月天久久91| 丁香五月激情五月| 丁香五月婷婷激情123| 99亚州综合精品成人网| 中文字幕,综合,91| 九九热99视频在线| 五月天婷婷丁香基地在线观看| 亚洲综合色婷| 日日干夜夜撸夜夜骑| 思思热在线播放| 日本天堂免费99| 欧美色色色色色色色| 最新高清无码专区| 五月丁香WWW| 狠狠做婷婷| 97色在线视频| 日韩亚洲视频| 97香蕉碰碰人妻国产欧美| 婷婷俺去也| 99情色五月天| 婷婷五月视频| 色八戒操婷婷| Www,五月天| 色色五月婷婷网| 色婷婷色五月色丁香| 91日本在线观看| 婷婷五月天色| 色吧五月婷婷| 五月丁香六月婷婷精品| 天天综合色| 伊人久久婷婷| 97色色色| 综合激情网五月激情| 婷婷六月综合激情| 性色播| 五月亭亭开心网| 久去色色| 狠狠精品干练久久久无码中文字幕| 深爱五月婷婷开心中文字幕| 婷婷五月天激情小说| 婷婷五月天 偷拍| 福利视频在线播放| 影音先锋人妻出差| 九九久久色| 五月丁香六月婷婷久久| 九九中文字幕九| 操逼巨乳91| 六月婷婷综合激情| 亚洲天天操| 五月婷婷六月丁| 色狠狠色噜噜AV天堂五区| 五月丁香激情综合网官网| 欧美成人猛片AAAAAAA| 久久久精久人妻| 99热传媒| 天天肏天天肏天天肏| 五月婷婷啪啪网| 老司机日日夜夜青草| 五月婷婷六月丁香激情深爱| 搡BBBB搡BBB搡五十| 亭亭五月天黑人2014| 婷婷新网址| 日日干日日| 九月丁香亭亭| 无码少妇高潮喷水A片免费| 五月丁香六月婷综合成人综合| 91色色色视频| 九九久久五月天| 做爱夜夜干天天操| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 婷婷五月天成人小说| 超碰资源在线| 五月丁香啪| 99性爱精品| 婷婷综合影院| 天天爽天天| 人人人人人人人草| 亚洲熟女色| 狠狠操狠狠| 五月婷婷之美女图片| 另类视在线| 99精品色| 五月激情婷婷六月| 久久女人天堂| 九九成人电影婷婷| WWW99热| 激情丁香淫荡婷婷| 日本97久久久精品| 五月天婷婷影院| 天天干天天操| 五月丁香狠狠爱| 日本久久色| 美女激情综合| 五月丁香色婷婷基地| 欧美色色色色色色| 国产AV一区二区三区日韩| 婷婷五月天激情在线| 婷婷五月天色色| 亚洲丁香五冃97色| 狠狠操狠狠爱| 俺也高清无码高清视频| 丁香色情五月综合激情| 丁香五月婷婷少妇| 丰满老熟妇BBBBB搡BBB| 日本色久| 视色综合| 色综合色婷婷色伊人| 潮汕成人AV片在线| 色五月婷婷在线| www,超碰| 9久热这里只有精品| 97人人干人人操| chaopeng在线人人| 久久激情综合| 免费AV在线| 婷婷基地五月色| 免费黄色视频网址| 久久五月情| 一点色成人网| av大香蕉| 久久亚洲天堂| 天天谢天天操| 婷婷综合五月激情| 成人在线日韩| 亚洲成人网站在线| 4399在线观看免费高清毛片| 蜜桃成语时李时珍 免费| 久操激情| 久久九九热视频| 东北婷婷五月天| 亚洲操操| 成人婷婷| 91视频久久久| #NAME?| 国产午夜成人AV在线播放| 色综合综合色| 色五月婷婷五月天| 99愛国产| 五月天自拍视频| 99热最新地址在线| 无码啪啪| 91久久精品无码一区二区三区| 婷婷五月天亚洲综合网| 亚洲电影在线观看| av在线资源| 午夜丁香婷婷| 久久综合影院| 久久精品人妻| 亚洲天天操| 丁香六月视频免费观看| 777精品成人a v久久| 激情五月天激情网| 婷婷五月中文在线| 色,激情五月天| 五月婷网| 在线成人网站| 99在线观看视频| 欧美色色色色色色| 91打屁股视频网站| 婷婷五月中文字幕| 91日视频| 六月婷欧美| 99热狠狠操| 婷婷丁香综合| 99色免费| 中文久久婷婷| 九九综合网色全集 | 色婷婷丁香五月丁香| 激情小说五月丁香在线视频观看视频| 五月丁香日本一抹本| 激情综合亚洲| 婷婷五月丁香av网站| 无码se| 激情色播| 五月丁香在线视频观看| sS丁香五月婷婷| 99久久黄色顶级视频| 久久这里在精品视频| 日本va欧美va精品发布视频| 丁香婷婷五月天色播| 人妻videos人妻高清| 森林影视大全,最好看的2019年视频 | 激情性爱五月| 99自拍网| 亚洲精品99| 五月综合激情网| 欧美槡BBBB槡BBB少妇| 大香蕉五月婷婷丁香| 天堂在线观看视频| 青青草五月天| 亚洲网站999| 九九久久五月天| a色色片| 婷婷综合五月激情| 日本色色影院| 香焦网五月天| 99色这里| 欧美毛片www| 五月天婷网| 婷婷五月天激情开心网| 人人摸人人操人人爽| 伊人激情影院| 久久精品国产精品| 亚洲国产网站| 亚洲AV人人操| 六月色色综合| 怡红院视频| 成人一级片| 激情五月婷婷| 老师高潮流白浆喷水的A片| 国产黄色av| 成人在线网址| 日日噜人人人做人| 色五月色五天色情网址| 九9九9无码| 夜夜骑操AV| 少妇丁香婷婷 | 天搞天天天天天| 另类小说五月天激情| 2022久久婷婷| 色五月成人| 中文字幕操比影片| 中文字幕久久一区二区三区| 熟妇无码乱子成人精品| 操操操av| 欧美丁香六月在线观看视频| 第四色首页| 人妻人人操| 麻豆观看夏晴子| 1024成人在线观看| 6月丁香婷婷激情| 五月天狠狠网| 亚洲天堂久久| 午夜日韩久久久网站| 精品在线| 人妻久久久久久久 | 婷婷五月成人系列| 五月天综合在线| 婷婷五月久久| 日本欧美在线| www,av好吊操| 色婷婷电影网| 婷婷综合九月| 无码中文一区二区三区| 人人操人人干AV| 日本精品人妻无码77777| 六月激情婷婷综合| 亚洲欧洲自拍图片专区五月天| 五月丁香六月| 字幕网AV中文字幕| 色99网| 五月婷婷在线观看| 99久久网站| 99er热精品视频| 天天舔天天摸天天射| 日韩在线观看亚洲| Aaa久久| 99久久久国产大片| 99在线精品视频| 国产露脸150部国语对白| 美女黄频aⅴ视频| 深爱激情网综合| 五月天激情四射| 中文字幕,综合,91| 亚洲 六月 综合| 337p大胆噜噜噜噜噜91Av| 成人毛片在线免费观看| 色婷综合| 热久久66| 五月婷婷久久综合| 激情99热| 深爱激情五月网| 五月天丁香婷婷网| 婷婷色五月综合丁香| 婷婷五月天激情电影| 久9热插入| 五月天堂婷婷| 综合网五月| 亚洲综合在线播放| 欧美中文五月天| 欧美婷婷丁香社区在线播放| 婷婷六月丁香综合| 伊人久久99| 99视频久久久| 噜噜色婷婷| 五月成人丁香av91| 国产综合激情五月久久| 五月综合久久| 色墦五月丁香| 成人网址在线观看| 日韩99视频| 亚洲国产精品VA在线看黑人| 国产精品 的国产| 欧美激情2025| 国产午夜伦鲁鲁| 天堂婷婷五月在线| 色噜噜狠狠色综合日日| 亚洲综合九九| 亚洲网视屏| 天天操中文字幕| 五月丁香婷婷AV| 伊人激情网| 亚洲五月情| 婷婷丁香五月综合网| 777丁香六月青青草婷婷综合久月| 日本天天操| 亚洲激情亚洲激情| 狠狠狠狠狠干| 做爱夜夜干天天操| www夜夜操| 天天插天天玩天天干| 成人精品在线观看| 超碰久热| 六月激情综合| 夜夜操夜夜爽| 麻豆AV一区二区三区| 翔田千里aV中文字幕| 91五月天| 日日操夜夜爽天天天| 少妇AB又爽又紧无码网站| www.色婷婷。com| 久久精品A片777777| 深爱五月天 开心网| 一级AV片| 日日夜夜小色哥| 99操网站| 五月丁香六月色| 超碰无码318604| 99热亚洲| 99欧美| www.99色| 丁香六月成人网| www91色网站| 婷婷六月啪啪| 国产熟女大叫受不了| www.91九色| 色婷婷五月天av在线| 色婷婷基地| 三级成人网站| 久久综合图片| 少妇性按摩无码中文A片| 六月婷久久| 开心五月天激情网| 人人干人人操人人摸人人做| 欧美97超碰| 99热这里只有精品5| 综合99综合久久久久久久| 色婷婷小说| 开心五月丁香综合久久| 北条麻妃伊人| 激情六月天| 色噜噜狠狠色综合无码久久欧美| 精品人妻伦九区久久AAA片| 五月天久久www| 亚洲人成网站999久久久综合| 久久综合婷婷五月| 九九日本视频| 亚洲丁香五冃97色| 超碰在线观看99| 成功精品影院| 色女伊人| 91久久| 国产精品久久久久久久久久久久| 天天日日爽| 99热丁香| 婷婷99狠狠| 思思热精品在线观看| 99精品人人| 中文字幕按摩做爰| 激情丁香五月天图片| 久久五月网| 国产黄大片在线观看画质优化| 天天综合中文| 日日干五月天婷婷| 美女久久天堂| 日日噜噜夜夜狠狠久久丁香六月| 久久五月天合网| 狠狠色综合久久久久| 久久久久久久97| 国产26uuu视频| 五月丁香久久色| 伊人在线视频| 色色 亚洲| 婷婷开心深爱五月天| 欧美A片在线视频免费观看| 色婷婷五月色| 天天操,天天插| 97操碰碰无码视频| 琪琪色五月婷婷老师| 婷婷色五月激情强奸四射| 婷婷激情综合无月| 久久99大全| 国产毛片精品一区二区色欲黄A片| www.99热这里只有精品| 欧日美女Va| 99热在线观看99| 天天拍天天操| 天天综合 99久久婷婷| 五月婷婷网久久| 一区视频网站| 26uuu成人网| 九九精品热| 六月丁香激情网| 天天 青草 制服丝袜 在线| 六月色婷婷综合影视| 99精品偷自拍| 91免费看片| 五月婷婷六月奇米网丁香| 99热婷婷| 丁香五月综合久久| 婷婷D区| 亚洲综合激情五月久久| Www.狠狠| mmm1717.6dbm人人爱人人操| 啪啪丁香五月| 永久天堂日本| 精品一二三区久久AAA片| 亚洲无码成人| 黄色激情五月天| 五月丁香综合伦理片| 日本久久高清| 97成人在线视频精品| 成人超碰网| 欧洲色色| 亚洲乱码在线观看| 五月成人天| 伊人丁香婷婷东京| 五月丁香婷婷爱激情综合网| 操日本三片99| 日本wwww在线| 在线看九一V图片| 激情综合网五月天| 五月丁香大相交| 六月婷婷在线| 日韩综合大黄| 色色色在线播放| 91久热| 综合激情五月婷婷| www.91AV.COM| 国产亚洲99久久精品熟| 香蕉久久国产AV一区二区| 丁香五月色| 97色97干| 婷婷五月六月丁香| www夜夜操comwww| 亚洲综合婷婷| 亚洲激情丁香五月基地| 婷婷激情五月天综合| 丁香六月婷婷开心| 日本一级特黄大片AAAAA级| 五月丁香婷婷激情四射迷人| 婷婷六月偷拍| 91色五月在线观看| 狠狠五月婷婷| 欧美激情综合五月色丁香| 另类少妇人与禽zOZZ0性伦| 五月丁香六月激情在线| 丝袜大香蕉| 天天色图| ww久久| 婷婷射综合| 91久久精品无码一区二区三区| 人人草人人看| 99视频| 婷婷五月天成人网| 五月亭亭开心网| 免费视频99| 婷婷久久色| 色婷婷五月天偷拍| 九九热超碰| 综合久久综合久久| 久久精品9| 99热国内精品| 91尤物九色在线| 丁香蜜臀黄色婷婷五月天| 五月婷在线影院| 成人五月丁香社区| 丁香六月激情综合| 色频玖玖五月天| 丁香五月 综合| 月婷婷亚洲| 五月婷色丁香| 五月丁香六月婷婷婷婷| 久久婷婷五月综合啪| 天天天天爽爽天干| 五月婷婷五月天在线| 五月天激情小说网| 丁香婷婷六月天| 五月亭亭六月天| 无码色| 成人无码精品1区2区3区免费看| 97在线观视频免费观看| 九九婷婷激情综合网| 久久男人网婷婷| 六月婷婷AV| 激情人妻综合| 99色综合| 丁香婷婷六月激情| 激情小说 五月天| 婷婷色五月在线视频| 91ncm视频| 五月丁香六月在线| http:色情日本com| www超碰com| 91无码高清| 久久激情五月| 美女100%露全身无挡网站| 亚洲久热无码| 天天干天天干天天| 婷婷伊人五月天| 国产婷婷色综合AV蜜臀AV| 亚洲午夜国产成人电影VA国产欧…| 欧美超碰亚洲| 婷婷色情网| 激情五月丁香综合蜜桃| 婷婷五月久久| 五月激情小说| 精品人妻一区| 久久5 9视频免费观看| 欧美日韩五月婷婷| 久久婷色| 99热这里只有精品2016| 天天日天天摸| 久久这里只有精品99| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 综合狠狠五月婷婷| 色婷婷成人五月| 五月色色色| 欧美成人一区二区三区在线视频| 激情碰碰碰| 激情五月婷婷| 伊人色综在线| 色五月婷婷综合| 天堂无码人妻精品AV一区| 综合婷| www.激情五月天。com| 婷婷五月激情在线| 99精品在线观看视频| 激情婷婷丁香| 丁香五月婷综合| 无码色色色色色 | 五月婷久久久| 六月色婷婷欧美| 婷婷丁香五月激情| 99热啪啪| 五月天婷婷久草丁香| 激情五月激情综合俺也去婷婷小说| 这里只有精彩视| 国产亚洲99久久精品| 日本44久久在线| 91九色国产| 丁香六月天之亚州热女| 大香蕉伊人久久| 67194中文在线| 婷婷99狠狠躁天天躁| 性99网站| 狠狠干夜夜干| 五月香蕉网| www..com色爱| www999日韩精品| W色综合| 色色激情五月天| 欧美VA在线| 婷婷久久综合| 午夜成人综合| 99re这里只有精品在线观看| 1024日韩| 免费成片在线观看| 深爱激情九九五月天| 久久久久久9| 精品99*| 无码九九| 第四色五月婷婷| 大香蕉 婷婷| 五月天狠狠网站| 99热这里只有精品8| 日本一級黃色一級片| 五月天婷婷久久| 五月亭亭狠狠| 婷婷五月天天| 激情综合婷婷五月| 五月丁香六月婷婷久久肏| 久久人人添人人爽添人人片αV| 五月六月播婷婷| 丁香五月社区| 91婷婷视频| 玖玖在线资源视频| 99色色网| 精品爆操| 91精品久久久久久综合五月天| 高清无码网址| 久久99免费视屏| www久久艹| 99草在线免费观看视频| 伊人国产婷婷五月天 | 久久成人天| 婷婷五月影院| 99热婷婷| 激情五月天婷婷激情| 日韩在线观看亚洲| 五月天丁香花婷婷| 欧美va亚洲va在线播放| 五月综合激情婷婷六月色窝| 91丨九色丨43老版熟女| 国产精品色婷婷久久久精品| 99操不停| 99热99这里免费的精品| 无遮挡国产高潮视频免费观看| 99er这里只有精品| 九九综合精品| 97碰碰在线看视频免费| 天天舔天天摸| 欧洲区自拍| 久久亚洲激情五码| 激情六月婷婷啪啪| 婷婷五月天人妻| A片试看50分钟做受视频| 五月天第四色开心色播| 久久激情五月| 99re这里只有精品99| 激情文学久久| www.久久久.com| 激情六月婷婷| 精品女人九九九| 精品网站:999WWW| 激情无码网| 九月色婷婷综合| 操逼国产91| 殴美综合激情五月天免费视频| 国产亚洲av片| 5月婷婷6月六月丁香| 大香人妻| 五月婷视屏在线观看| 日本在线观看aaa 99| 久热网在线视频| 91在线人| 婷婷色五月天在线观看| 9999综合99综合人| 久久五月天综合| 久九九热| 久久狠狠干| 色色丁香婷婷| 夜夜骑夜夜撸| 亚洲综合视频天天精品| 丁香六月婷婷综合| 99精品一二三四视频| 九九伊人网| 婷婷激情五月天在线视频| 秋霞免费视频| 婷婷玉月丁香五月在线视频| 久久婷婷综合五月| 五月花亭亭| 狠狠色噜噜狠狠亚洲A∨| 色五月婷婷九月| 超级碰碰91| 大香蕉av在线| 狠狠看狠狠| 九九九激情综合| 天天操,夜夜骑| bukadeavzaixian| 中文字幕综合| 五月婷丁香| 99性爱| 伊人狠狠综合| 97人人操com| 久久婷婷内射| 啪啪色激情五月天| 国产XXXX搡XXXXX搡麻豆| 天天操天天日天天操| 亚洲色婷婷久久99精品91| 色哟哟www| 丁香五月天无码AV| 亚洲乱码日产精品BD| 综合激情深爱| 婷丁香五月天| 六月婷婷开心| 亚洲色小说在线综合| 色九九一二| 99自拍视频网站| 天天爽—爽| 色欲久久99精品久久久久久| 成年人丁香五月| 玖玖国产视频一区| av高清无码| 熟女激情五月天 | 亚洲黄色影视| 99视频| 五月叮香啪| 大香蕉人妻| www.97视频| 婷婷社区五月天| 色愛综合网| 亚洲超碰青涩| 91凹凸在线| henhencao国产在线| 1769在线观看欧美国产| 9色在线视频| 99热这里只有精品13| 欧美日韩五月婷婷| 99re8在这里只有精品| 亚洲噜色| 日本不卡中文字幕| 日韩艹比| WWW.99视频| 五月天久久婷婷婷| 欧美日韩成人在线免费| 久久98| 色情婷婷五月天| 五月丁香婷婷爱激情综合网| 天堂在线伊久| 日本91在线| 热这里| 色婷婷久久综合| 五月婷婷亚洲天堂97色婷婷| 五月丁香精品| 俺也去综合| 婷婷四色五月| 无码碰碰| www.婷婷五月| 色婷婷丁香| 天天操夜夜啊| 停停六月 综合| 精品人妻伦一二三区久久| 99热这里只有精品66| 欧美日韩AAAAA| 婷婷五月天午夜激情影院| CHINESE熟女老女人HD视频 | 婷婷五月花西瓜| www99热| 伊人大蕉香| 久久五月婷| 岛国av网站| 色婷婷国色天香综合| 婷婷色五月激情强奸四射| 国产精产国品一二三在观看| 黄色成人网站在线播放| 丁香丝袜五月| 久久九九怡红院| 超碰爱爱爱| www.金莲av| 六月色婷婷| 97色啪| 5月丁香六月婷婷| 丁香六月婷婷综合色| 射久久丁香五月| 丁香8月手机综合| 成人在线99| 午夜九九九九九九九九九九九九九| 天天射天天射一道本日本社区| 激情文学久久| 激情久久综合网| 99国产在线精品视频| 天天日夜夜拍| www.yw色| 亚洲五月色| 婷婷五月天深爱| www.狠狠| 99精品视频偷拍| 秋霞少妇毛片| 色色色com| 五月天激情小说网| 久久久久9| 久久久无码精品成人A片小说 | 激情五月天伊人影院| 手机AVAV天堂看网| 都市激情久久| 伊人久久99| 97在线/亚洲|