99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

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
返回資訊列表
色情婷婷| 精品欧美一区二区三区久久久| 日韩黄色电影| 五月婷婷五月| 伊人五月天| 五月六月丁香激情视频| 五月天婷婷久草丁香| 久热9| 玖月婷婷爱丁香| 日韩三级高清无码| 婷婷五月天激情小说| 热久久66| 深爱五月婷婷开心中文字幕| 91n啪啪| 九九热在线精品视频| www.亭亭五月天| 一区二区乱码视频| 98热精品| 偷拍99在线视频观看| 五月婷婷久久综合| 九九国产精视频| 9999综合99综合人| 成人国产网| 婷婷综合五月| 亚洲综合热| 思恩热国产视频右线观看| 婷婷五月综合基地| 九九草草逼| 激情综合五月婷婷六月丁香 | 五月天婷婷色色网| 激情综合丁香| 男女啪啪视频久 9| 999热这里只有美国精品| 大香蕉五月婷婷| 噜噜操操| Www.狠狠| 天天色视频| 天天肏天天爽夜夜爽| 五月天婷婷激情网| 婷婷成人综合| 日韩色色色色色| 婷婷久久色| 亚洲狠狠爱婷婷| 能看的av| 欧美成人AAA片一区国产精品| 日本婷久久| 色婷婷基地| 久久99热 这里有精品| 五月婷婷综合网| 婷丁香五月天| 亚洲婷婷在线播放十月| 热久久思思热思思| 国产高清精品色| 美妞av| 五月丁香综合啪啪| 五月婷无码| 亚洲AVDVD| av在线观看网址| 欧美激情 日韩无码 婷婷 五月天| 亚洲五月六月婷婷| 久草五月丁香婷婷综合| 伊人大香蕉在线视频| 五月婷狠狠| 强辱丰满人妻HD中文字幕| 99热这里只有精品2| 97超碰在线免费观看| 五月激情婷婷在线| 免费AV播放| 成人片在线播放| 丁香婷婷色| 97色色在线视频| 五月婷婷啪啪啪| 婷婷婷婷色| 九九热经典视频在线观看| 婷婷五月色天| 国产成人精品亚洲线观看| 婷婷激情五月综合| 一级黄在线| 美女精品一级不卡视频| 五月激情婷婷在线| 免費观看aV在线网址| 亚洲av另类在线观看| 91丨九色丨国产| 丁香五月 性爱| Caoporn公开| 久久九九经典| 亚洲操操| 狠色色狠网| 可以看的AV| 五月综合在线| 成人中文网| 丁香五月激情五月色综合| 91窝窝| 国产高清av黄色看片| 天堂久久久久天堂网| 26uuu成人网| 久久婷婷五月综合色天| 五月丁香手机在线| 色婷婷亚洲精品天天综| 激情五月丁香五月| 日韩无码系列| 激情婷婷五月天网址| 五月婷婷co.m| 激情五月天色网站| 3DAV亚洲香蕉久久 一区二区| 三级av在线| 久久色吧| 日日干天天| 婷婷丁香色五月天| 影音先锋色色色资源色资源色| 日韩按摩二区| 六月丁丁香| 久草丁香婷婷1024| 99热 免费| 六月丁香婷婷五月| 欧美日韩成人在线| 91精品无码| 免费试看小视频 99| 五月天婷久精视频| 黄色AAAA韩国guochansanji | 亚洲中文字幕网| 99性爱视频| 五月天社区| yazhoujiqingav| 五月丁香自拍| 色性五月天| 婷婷五月激情丁香| 亚洲99热| 亚洲 在线 性爱 | 久久婷婷丁香| 伊人在线视频| 狼人狠狠操| 91精品国产99久久久久久天美| 五月开心久久| 久9久9久9久9久9久9| 色五月色五天色情网| 婷婷丁香激情综合色情| www,com,五月色色| 亚洲成人AV高清字幕| 欧美三级黄色片久久| 思思热在线视频99| 欧美成人精品A片免费一区99| 色婷亚洲五月丁香| 婷婷五月天播播| 成人做爰高潮A片免费视频| 伊人www22综合色| 天天操天天操天天操天天操天天操天天操| 大伊香蕉精品视频在线| 色播五月丁香综合| 丁香网五月天| 操一操| 狠狠色色| 森林影视大全,最好看的2019年视频 | www.六月丁香看AV| 丁香8月手机综合| 婷婷永久在线| 啊v视频在线观看| 久久免费操| 久久伊人五月天| www.婷婷五月.com| 婷婷丁香十月| 成人网在线视频| www.色婷婷| 综合 蜜月 婷婷| 婷婷五月天电影在线| 日本乱子人伦在线视频| 欧美狠狠一在草| 色婷五月天| 国产av基地| 婷婷六月综合基地| 婷婷午夜| 六月婷综合| 久久久久人无码人妻| 成人午夜天| 26uuu亚洲欧美另类| 国产一区二区三区影院| 思思热国产| 九月婷婷综合色干| 97久久草草超级碰碰碰| 丁香 婷婷五月| 26UUU精品一区二区| 粉嫩av懂色av蜜臀av熟妇| 9 1超碰九色| 一起草无码视频| 天天日 天天草| 色婷婷影| 97色婷| 久久狠狠色| 五月综合激情啪啪啪啪啪| 99九九精品视频| 伊人久久大香天蕉亚洲特级| 激情五月天在线视频| 亚洲色色图片| 天堂久久大香蕉| 秋霞三及片| 亚洲狠狠丁香婷婷香蕉| 爆乳熟妇一区二区三区爆乳照片| 求可以看的AV网址| 91精品无码久久久久久五月天| 国产综合色婷婷精品久久| 成人日韩欧美| 99热在线观看99| 人人草人人舔| 抽插特写| AV性爱网| 欧洲日韩一区二区三区| 91爱操| 无码色| 色婷婷深爱五月| 熟妇天天综合| 婷婷五月天丁香| 天天日狠狠| 99视频在线观看视频| 激情综合网五月激情| 五月天色综合服务平台| 日韩操人| 久久jiuwww| 天天综合精品| 午夜成人天堂久久无码日韩久久| 久久久人妻门| AV 3P| 亚洲成人av在线播放| 99久在线精品99re8| 一起草无码视频| 五月九九综合| 99国产精品久久久久久久久久久| 2017狠狠干| 成年人99热| 久久婷婷综合基地| 九月激情综合婷婷| 婷婷狠狠爱| AV人人操| 欧美色97| 丁香婷婷深情五月亚洲| 丁香花五月天| 五月丁香婷婷啪啪综合| 极品人妻VIDEOSSS人妻| 老司机日日夜夜青草| 激情5月婷婷| 欧亚色色| 婷婷色激情网| 久热99| 亚洲婷婷五月天| 色婷婷精品视频| 开心五月丁香啪| 久久视频婷婷视频| 亚洲在线操| 99爱在线| 老司机视频lsj爱就色| 五月婷婷之综合激情| 少妇久久诱惑视频| 26UUU欧美激情一区二区| 天天骑日日爽| 六月丁香啪| 婷婷丁香五月天影院| 色婷婷狠狠18yy| 男女啪啪做爰高潮无遮挡| 人人操五月天| 天天干天天干天天干| 色五开心五月五月深深爱| 激情开心五月婷婷| 日 日干 日日做| 狠狠做六月爱婷婷综合aⅴ| 97干在线播放| 久久五月丁香| 日日日日做夜夜夜夜无码| 成人短视频在线| 丁香五月手机在线| 久re热视频| 9 1在线视频| 思思re99视频在线观看| 大香蕉五月天婷婷| 国自产拍偷拍精品啪啪一区二区| 色色网站毛片| 婷婷五月综合网激情| 伊人久久大香| 九九99九九99偷拍视频免费看| 国产精品久久久久9999小说| 182无码| 丁香五月婷婷激情97| 996热re视频精品视频| 丁香综合婷婷五月天| 开心色播色五月婷婷| 夜夜噜夜夜奇| 久久精品性爱| 婷婷五月天堂| 婷婷激情久久| www.久久久久久| 碰久久精品w| ww超碰在线| 久久五月婷婷视频| 婷婷啪啪| 五月天婷婷在线观看精品男人| 六月色播| 日韩人妻无码专区| 久久五月婷婷电影| 激情五月,激情综合网| 丁香五月婷婷婷婷欧美综合| 狠狠激情五月天| 亭亭玉月丁香| 精品夜夜澡人妻无码AV| 九九热青青草| 亚洲激情综合色站| 五月丁香婷婷综合| 五月天色丁香| 丁香色情五月综合激情| 久久99久久99久久99人受| 久鲁鲁色网| www.亚洲激情| 久久婷婷六月综合| 夜色爱爱亚洲| 五月丁香啪啪激情| 夜夜干天天干| 99国产精品白浆在线观看免费| 无码碰碰| 思思99热在线| 免费看成人AA片无码视频吃奶| 五月丁香在线| 欧美WW在线网| 精品一区二区三区四区五区六区介绍| 天天爽天天摸| 婷婷五月天成人网| 99热这里只有精品1025| 婷婷九月| 六月婷婷五月天| 亚洲操操操| 婷婷五月激情小说| 久久婷.com| 伊人狠狠干| 97操操操| 超碰国产在线观看| 婷婷色丁香六月| 色综合伊人网| 极品人妻XXXXOOOO| 天天激情综合| 日本色婷婷| 天天色2017| www.jiujiujiu| 内射在线CHINESE| 久久精品63| 9热在线观看| 六月丁香婷婷综合色播| 99色中文| 韩国中文字幕91| 色人久久| 丁香激情网| 亚洲无码猫咪| 日日操,夜夜撸| 久久久99免费视频| 国产做A爰片毛片A片美国| 久久婷婷五月综合色丁香| 天天撸夜夜爽| 国产婷伊人| 天天做综合| 国产在线中文字幕| 成人国产网站| 天天色天天日| 色色色色网站| 日本色道视频网站| 另类图片五月天| 九九热大香蕉| 国产高清视频91九九九久久久| 4399亚洲视频| 狠狠操狠狠插| 九九青草热| 99这里只有精彩视频| 亚洲综合色婷婷| www.色综合| 婷婷五月天亚洲丁香| 图片区 小说区 区 亚洲五月| 日本色婷婷| 久久久99免费视频| 97操碰人免费| 天天夜天天色天天| 亚洲殴洲精品Av在线| 天天色丁香| 五月天.com| 综合在线观看99| 四五月婷婷| 色色无码| 久热网在线视频| 2015在线中文字幕| 香蕉综合在线| 五月天婷婷成人网| 色综合综合色| 亚洲精品九九| 操97免费超级视频| 六月婷婷天天操夜夜爽视频| 欧美内射AA| 97精品综合久久| 亚洲成人网站在线观看| 婷丁香五月天| 红桃91人妻爽人妻爽| 日本免费91| 亚洲五月天婷婷| 久热成人| 日本黄色三级片内射| 天堂草在线观| 五月色亚洲| 婷婷成人AV| 久久98| 天天干天天干天天干| 精品视频网| www.色婷婷| 五月丁香综合在线| 日本欧美成人片AAAA| 婷婷开心综合人妻小说网址| 99热性色| 99热综合| 这里只有免费的精品| 五月天丁香啪啪啪啪| 99精品在线观看视频| 久久99这里| 婷婷五月丁香青青草在线| 99热精品一区| 五月婷婷六月天| 天天射影院| 九热视频| AV在线资源| 欧美性生交XXXXX无码小说| 五月婷婷手机在线| 九月色婷婷| 天天射天天操天天干| 碰碰女| WWW.桔色成人.COM| 超碰在线国产| 日韩野外 无套| 日韩AV色色色| 另类在线| 亚洲中文字幕翔田千里| 色情五月综合婷婷| 久久激情天堂| 开心激情网在线| 色情五月天视频网| 久久久久99精品成人网站| 色情五月丁香| 超碰成人在线观看| 九九综合精品| 六月丁香婷婷色狠狠久久| 无人区码一码二码三码医生系列| 黄色AV日韩| anquye伊人| 91丨九色|PRNY熟妇| 青青久在线视频免费观看| 五月天狠狠色| 色日本五月天| 日本色色视频| 99热这里只有精品268| 激情性爱五月天网页| 色婷婷电影| 五月丁香六月婷婷激情视频在线观看免费 | 五月天大香蕉AV| 久久久久人妻| 五月叮香啪| 亚洲 25P| 婷婷六月激情啪啪| 无码yw| 99热伊人综合| 97久久婷婷色| 色综合99无码| 爱99干99| 五月婷婷色播| 五月丁香综合网色欲| 97色综合| 在线中文AV| 国产精品99久久久久久久女警| www.久久久.com| 色情五月停停丁香| 婷婷色情六月| 五月天六月色| 五月综合影院| 五月天狠狠草| 思思热视频在线观看| 特级片神马电影| 五月婷婷丁香大陆免费| 综合激情五月四射婷婷| xxxx五月| 婷婷五月丁香五月天| 色五月天综合| 天天综合亚洲综合| 这里只有精彩亚洲视频推荐| 日韩99精品| 99re这里只有精品99| 婷婷久久网| 色婷婷久久久| 激情婷婷五六月天| 国产精品香蕉| 九色无码| 日日夜夜天天| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 婷婷丁香高潮了| 干亚洲天堂| 99亚洲欧洲| 丁香五月婷婷天| 五月婷婷开心综合| 九九热精品99| 99∨VTV| 成人午夜视频精品一区| 激情六月天| av大片在线| 婷婷五月丁香图片人人操| 九月性爱网| 久九色| 99这里有精品视频| 激情av| 伊人久久五月天| 色五月综合激情| 另类图片五月天激情| 1024你懂的欧美曰韩| 婷婷丁香九月| 狠狠色丁香婷婷基地| 丁香婷婷六月在线资源观看| 久久久精品AV| 男女啪啪做爰高潮无遮挡| 九九九AAA热视频| 精品牛仔裤超碰| 六月激情丁香一道本7777| 日本三级中国三级99| 亚洲色色五月天| 丁香婷婷激情综合五月激情| 色婷婷五月天不卡| 99精品久久久久久久婷婷| 五月丁香六月婷婷在线小说视频| 婷婷深爱五月天在线| 狠狠操天天日| 五月丁香无码| 九月停停| 超碰AV成人| 九月婷婷综合在线| 久婷婷五月丁香在线观看| 丁香五月婷婷欧美成人色图| 五月丁香六月婷婷色情| 五月天婷婷成人网| 99久热精品在线| 色婷婷五月丁香在线观看| 欧美五月丁香| 亚洲亚洲人成综合网络| 97ai婷婷| 内射丰满人妻| 亚洲这里只有精品| 黑人熟妇一区二区三区| 99久久婷婷五月天| 久久九九网| 98永久精品| wwW天天干| 婷婷丁香五月婷婷| 婷婷黄色网| 99ri久久| 色激情五月| 9久热精品在线视频| 国产 亚洲 在线| 五月久视频| 色图亚洲91| 成人在线精品| 国产熟女日日骚五月丁香爱| 美日韩成人| 91网站黄| VA婷婷亚洲| 婷婷五月天丁香| www.日韩国产| 久色视频| 丁香婷婷老司机久操| 久久久五月天| 中文无码婷婷| 男人天堂99| 来吧亚洲综合网| 在线五月婷| 森林影视大全,最好看的2019年视频| 五月丁香六月婷婷在线观看| 婷婷综合久久综合| 激情色视频| 国产成人+综合亚洲+天堂| 97操在线视频| 丁香激情五月天| 综合九九中文字幕| 五月婷在线| 婷五月天六| 另类五月激情| 色原狠狠综合| 丁香五月激情网| 国产精品色婷婷久久久精品| 婷婷五月电影| 丁香五月激情欧美| 狠狠99| 色九月综合| 五月天成人在线| 激情久久伊人| 99热免| 丁香六月综合激情| 色婷婷国色天香综合| 偷拍丁香九月激情| 五月婷婷成人网首页| 国产伦亲子伦亲子视频观看| 五月丁香婷中文字幕| av免费在线看不卡无毒| WWW丁香五月| 婷婷五月天无码熟女| 最近中文字幕大全免费版在线 | 婷婷五月天伦理| 色香欲综合| 色婷婷视频| 亚洲操操操| 色婷五月天网站| 色五月情| 天天插夜夜爽| 丁香花操逼| 狠狠色婷婷六月激情网| www色综合亚洲92| 色五月五月婷婷| 色丁香五月天射婷婷爱婷婷| 亚洲熟妇AV乱码在线观看| 人妻操在线看| 激情操逼婷婷| 激情第四色| 激情五月天的婷婷| 婷婷综合在线| 五月丁香六月婷婷操操操| 日韩在线视频网站| 日本熟妇乱妇熟色A片蜜桃| 丁香综合网| 情色五月天 网站| 丁香五月综合激情性爱| 六月色播| 日本44久久在线| 天堂综合久久 | 欧美在线ee日韩| 射久久丁香五月| 六月色伊人婷婷| 51精品国内探花| 成人精品在线观看| 色五月六月| 91ncm视频| 色播五月丁香| 色婷婷狠狠18| 青草视频在线蜜臀| 五月丁久久| 97碰人人操| 99精品在线观看| 色操综合| 99这里都是精品| 色噜噜狠狠色综合日日免费| 殴美97色| 色婷婷五月天| 亚洲成人综合在线| 丁香五月天无码| 999热在线视频| 九九精品碰| 99在线免费视频| 婷婷五月激情的图片| 日本色久| 亚洲精品无码一区二区| 婷婷五月天综合网| 99视频只有精品| 色婷激情网| 伊人久久大香线蕉av一区| 天天色综网| 另类激情中文| 五月婷婷官网色| 婷婷五月天AV在| 天天综合网站| 精品国产va久久久| 秋霞电影理论| 天天做天天爱天天爽在| 99热 这里只有精品 国产 日韩| 伊人大综合| 欧洲色色| 色九九综合| 亚洲人妻一区二区| 深爱激情九九五月天| 丁香五月激情宗合网| 色色色色丁香| 天天看A片| 天天肏天天肏天天肏| 五月丁香六月成人| 夜夜干天天干| 婷婷婷婷色| 日韩狠狠色| 色婷婷综合网站| www.色综合| 综激情网| 婷婷五月色惰| 五月婷婷啪啪啪啪| www,99热| 久久99网| 色五月婷婷影院| 激情综合五月婷婷| 4438激情网| 五月天婷婷色色网| 久久激情五月婷婷| 国产成人av在线| 人人干天天操五月丁香| 久久五月婷综合网| 人人人操B超碰| 色六月视频| www.五月天激情| 9999色色色色| 丁香五月天AV| 婷婷五月丁香基地| 婷婷八月丁香激情综合| 日韩高清成人| 成人va在线播放| 任我肏| 色99视频| 国产精品电影| 日韩九区| 婷婷99狠狠躁天天久久久九九九| 亚洲无码性爱| 久9精品| 中文字幕成人| 日夜夜天天| 婷婷激情五月天小说校园| 色综合xx| 国产裸舞福利资源在线视频| 丁香五月激情性色郤| 激情五月天在线视频| 丁香五月六月综合激情| 激情婷婷五月天| 丁香九月激情在线视频| 大香蕉久久久| 琪琪布丁香社区激情五月天| 国产精品久久久久久久久久| 日本丰满久久| 婷婷六月综合| 六月婷五月丁香| 26uuu在线观看| 欧美婷婷五月丁香| 欧美天堂婷婷日韩| 日韩在线视频网站| 五月丁香成年黄色| 二区成人视频| 九九热视频精品2| 射久久丁香五月| 综合久久综合| 果冻传媒A片一二三区| 另类在线| 九九精品婷| 久久综合激情五月天| 蜜桃五月天| 亚州操操| 天天摸天天肏| 激情五月最新网址| 丁香五月欧美激情| 亚洲激情免费视频| www.五月天婷婷| .comwww在线观看免费操| 男人天堂 久久| 伍月婷婷免费视频| 五月丁香亭亭| 西西4r午夜剧场| 激情婷婷五月综合| 色婷婷影院| 五月激情站| 激情五月婷婷视频一区二区三区| 丁香五月天电影| 国产麻豆视频| 字母不卡码人逼| 久久er+| 五月婷婷久久久| 精品一二三区久久AAA片| 久久多色| 激情网婷婷五月天| 五月婷婷激情啪啪| 婷婷丁香五| 99视频久久| 欧美黄色AA片哗啦啦啦| 91无码高清| 五月丁香花婷婷玉莉AV| 一起草Av| 久9热视频| 天堂草在线看www| 丁香六月欧美| 欧美日本国产欧美日本韩国99| 99热老司机| 天天综合 99久久婷婷| 偷拍99在线视频观看| 日本色婷婷| Www.婷婷五月| 久久A极片| 丁香六月婷婷高清| 免费看欧美成人A片无码| 九九色逼| 久久色情| 久久在线92| 五月丁香六月婷婷色情| 99热久久这里只有精品| 婷婷激情四射五月天| 五月天六月婷婷电影| 色婷婷在线电影| 天搞天天天天天| 99思思| 99网址在线观看| 涩涩涩.com| 久久婷婷免费| 色五月婷婷激情| 伊人丁香五月婷婷潮吹| 99色播| 亚洲日韩一页精品发布| 中文激情网| 99色色色色| 青青草Avb在线| 九九热在线观看视频| 欧美日韩国产日本精品四虎网网站物| 深爱五月中文字幕| 99热精品在线播放| 青青草深爱激情网| 日本久久婷婷| WWW,激情五月天,COM| 丁香五月色| 小视频一区| 五月婷婷开心网| 丁香 婷婷五月| 中文字幕日本最新乱码视频| 婷婷丁香水多多视频| 中日韩美欧成人一区二区精品在线 | 午夜婷婷| 成人色情五月天婷婷丁香| 九九色逼| 色 五月婷婷基地| 婷婷五月激情综合| 色欲九区| 日日夜夜狠狠| 色五月激情网| 51精品国自产在线| 五月亭亭六月激情| 婷五月天| 亚州精品色情无码A片| 亚洲天天| 六月丁香啪啪| 久色| 婷婷五月激情欧美大胆视频| 久久爱综合| 超碰在线观看9| 91精品久久久久久77777| 天天干肏夜夜| 99性爱视频| 五月婷婷丁香综合| 成人做爰高潮A片免费视频| 婷婷五月天综合激情| WwW色婷婷| 五月久久婷婷| 狠狠狠五月婷婷六月丁香| se99热久久一本| www.天天干| 狠狠另类视频| 丁香五月影| 9l视频自拍9l视频自拍九色学生| 99热这里只有在线播放| 日本V在线观看不卡视频网站| 综合噜噜| 婷婷丁香五月天在线视频| www.狠狠| 五月综合婷婷网| 狠狠干综合网| 久草婷婷网 | 色人妻五月| 99啪在线| 婷婷综合精品视频97| 丁香五月色| 中文字幕婷婷在线| 99国产精品久久久久久久久久久| www,av好吊操| 人人操人人看97干| 91久久久久久久| 日韩视频99| 狠狠狠激情网| 伊人激情| 婷婷欧美激情| 中文字幕在线视频播放| 婷婷久久五月| 人妻久久久| 99re这里只有精品国产99| 激情四射婷婷色色色| 99热这里只有精品免费观看| 久热这里这里有精品| 色九月婷婷综合| 天天色丁香| 五月婷视频久久| 97电影99热| 欧美日韩成人h| 67194国产| 综合啪啪| 欧美一区二区三区不卡影视| 9久热精品在线视频| 日本高清久久| 激情小说五月天| 五月花免费视频| 五月丁香六月合| 日本久久激情| 亚洲欧洲中文日韩久久AV乱码| 婷婷六月啪啪| 超碰免费人妻| 五月天伊人综合| 丁香五月香蕉| 情色婷婷五月天| 激情五月婷婷啪啪| 六月丁香开心婷婷欧美| 日本婷婷色| 99丁香五月| 久久久久久久久久久-久五月天婷婷| 久热免费视频| 日日做天天操夜夜爽| 亚洲五月天天| 激情综合网丁香| 婷香五月网在线| 91啪啪视频| 99热99| 婷婷五月天综合AV| 超碰A V在线| 亚洲AV电影av| 六月丁香五月婷婷| 久草五月| 五月丁香成人网| 五月丁香六月| 亚洲人妻av| 无码激情AAAAA片-区区| 无码AV免费精品一区二区三区| 五月婷婷丁香大陆免费| 色婷婷操逼| 九九无码| 色欲婷婷五月天| 天天日夜夜| 日日综合网| 好吊操这里只有精品| 午夜美女人啪最红院| 丁香五月婷婷精品视频| 99久热在线精品| 色久女| 久久99人人| www.婷婷五月天| 婷婷五月天激情综合深爱激情| se99视频| 色色网站免费观看| 亚洲噜色| 丁香五月成人网| 九九综合精品| 成人国产欧美大片一区| 31色区视频免费看| 99色热| 激情性爱五月| a在线观看| 婷婷香蕉| 日本在线观看aaa 99| 婷婷五月丁香91| 六月丁香中文字幕| 人妻操逼| 婷婷激情五月综合丁| 婷婷色五天| 91精品综合久久久久久五月丁香 | 亚洲综合五月天婷婷丁香| 51精品国自产在线| 97碰碰九九视频| 国产AV一区二区三区最新精品| 久色视频| 免费99情趣网视频| 五月激情婷婷色| 天天干天天叉| 99色| 色综合久久久久| 色婷婷成人丁香| 天天日夜夜拍| 亚洲人人操| 免费V片在线| av大香蕉| 亚洲午夜Av| 婷婷五月俺要去| 久久这里只有欧美| 天天日综合| 色五月色图| 久综合| 婷婷丁香六月天激情四射网| 五月丁香婷婷在线| 深爱激情69热| 日日.c| 婷婷色五天| 久久香蕉网| 久久人视频| www久久久| 亚洲成人AV一区在线观看| 在线观看av网站| 中文激情网| 欧美激情五月综合| 婷婷丁香五月激情图片| 91大神操美女| 成人国产网| 伊人干综合| 婷婷深爱五月丁香| 久久A区B区| 久久人人九九| 国产精品成人AV在线观看春天| 国产在线视频1234| 久久性爱网站| www久| 五月丁香激情四射综合| 五月婷婷开心五月| 五月丁香亭亭操逼| 日韩久久日| 五月天婷婷色小说| 丁香激情五月天| 激情黄色小说色五月| 婷婷爱婷婷| 欧美大肥婆大肥BBBBB| 99熟女| 91视频五月丁香| 五月香婷婷| 极品色丁香| 狠狠色五月天| 婷婷丁香婷婷97| 日日夜夜天天爽| 久久久国产精品黄毛片| 色视频2025| 九九九色综合| 九九热只有精品| 色综合久久综合中文综合网| 99网99热| 91丨九色丨国产在线| 五月天婷婷在线播放免费| 婷婷婷婷婷开心无码播放| 亚洲欧美成人在线观看| 激情美女五月天激情在线| 福利视频在线播放| 97色婷婷五月天| 六月丁香婷婷综合狠狠爱夜夜爱| 8050一级网| 婷婷五月偷拍| 日韩啪啪自拍| 丁香婷婷五月| 操人无码| 99色在线| 久久98| 秋霞午夜理论 | 精品一二三区久久AAA片| 一夜福利不卡| 另类小说五月天| 九月丁香久久网| 色五月久久成人婷婷| 亚洲天堂99| 九色PORNY9l原创自拍| 日韩成人电影在线播放| 色综合九九色综合88| 爱爱色五月天| 天天综合色丁香| 深爱激情六月天| 五月情丁香色| 婷婷五月激情在线视频| 午夜成人在线免费视频| 色婷婷4| 少妇AB又爽又紧无码网站| 天天摸日日舔狠狠添婷婷婷| 色欲五月丁香| 99热在线看| 日韩性视频| 立川无码av| 丁香花大香蕉婷婷综合| 区区久久妻| 极品人妻VIDEOSSS人妻| 六月久久狠狠| 久久香蕉福利| 二色av| 亚洲中文字幕AV| 五月丁香日本一抹本| 日本精品人妻无码77777| 深爱激情四射| 色99免费视频中文| 色色色色色综合| 热久久视频99| 99视频网址| 96精品久久久久久久久| 婷婷丁香77777| 国产精品第一国产精品| 色婷婷成人五月| 九月影院義母在线播放| 国产人妻777人伦精品HD| 六月激情婷婷| 色五月xxx| 色久一| 97碰碰在线看视频免费| 国产超碰在线| 97超级碰人人| 久久99久久久久久| 亚洲激情区| 婷婷免费视频| 免费视频99| 亚洲综合激情五月| 久久久精品视频79| 久久日婷婷| www99热| www.丁香五月| 久久性刺激| 国产成人综合网| 久色中文| 九九久久偷拍| 国产.亚洲.欧洲视频在线| 色情综合| 夜夜 操无码| 色99视| 国产99久久久| 九九色视频| 99热99成人| 538在线精品| 中美日韩成人在线| 婷婷色五月噜噜| www.五月丁香| 韩国中文字幕91| 婷婷五月情| 影音先锋天天日| 99精品久久久久久久婷婷久久| 三级黄网站| 美女五月天| 色五月av| 激情五月天www| 婷婷天堂站| 久久五月天网| 久久丁香五月| 九九精品视频在线6| 久草视频一,二三四| 精品自拍97| 老美AA片| 九九在线精点品| 五月香婷婷| 六月丁香婷婷色狠狠久久| 91人妻人人操| 97人人操| 天天骑日日爽| 激情综合五月天| 91视频免费后入强操| 琪琪狠狠干| 久久婷婷老| www.婷婷五月天| 丁香五月社区| 热99在线| 亚洲色欲AAAAAA| 婷婷五月 丁香六月| 丁香 婷婷 激情 综合 五月| 丁香婷婷六月| 色色色地址| 久久性爱视频| 婷婷五月天网| 婷婷舔| 99精品在| 99九九在线视频| 五月激情天| 婷婷伊人中文字幕| 五月婷婷丁香俺日污视频| 六月色丁香中文字幕| www.婷婷,com| 日本久草福利| 婷婷自拍| 五月综合激情啪啪啪啪啪| www.韩日视频| 亚洲成人AV高清字幕| 直接看的AV网站| 六月丁香停| 波多野结衣AV无码Porn| 婷婷五月天国产在线播放| 色婷婷亚洲五月天| 五月婷婷丁香大陆免费| 五月丁香av在线| 六月婷色六月| 五月天婷婷丁香社区| 天天操天天曰| 97婷婷丁香| 丁香婷婷啪啪| 亭亭玉月丁香| 久久在线视频免费观看| 久久精品99| 婷婷五月天性色| 色九月丁香婷婷蜜桃在线观看| 国产伊人大香蕉| 丁香五月婷婷av| 華人性愛AV在線| 色丁香在线视频| 久久性爱99国产| 热久久这里只有三级视频| 久操干| 操草草草| 色www.con| 掩去也综合五月视频| 九九热这里有精品23| 天天色天天爱天天爽| 天天综合色| 狠狠色婷婷| 狠狠操综合| 伊人爱爱日本| 噜噜色五月| 六月色 亚洲| 日韩在线视频中文字幕| 99热九九这里只有精品10| 天天爱天天做天天舔| 色综合天天天天做夜夜| 亚洲黄色精品| 九九热精品| 99碰视频| 亚洲性爱干干| 狠狠色激情综合| 色五月91| 亚洲激情四射色| 色欲色香综合网站| 91狠狠综合久久| 成人丁香婷婷五月天| 五月综合无码| 无码色| 久久久香港| 激情综合网五月丁香| 美女主播野战视步页| 99色最新在线视频网站| 色5月婷婷色| 日韩无码AV电影网站| 久久看九九90| 色青青五月| 色色无码| 婷婷97狠狠成人网站| 亚洲无码影音| VA色婷婷| 99在线精品视频免费观看20| 婷婷五月丁香五月| 欧美久久久久久久久中文字幕| 国产亚洲99| 夜夜干天天干| 99热18| 超级碰碰碰碰视频| 丁香五月天婷婷91| 亚洲成人在线播放| 五月丁香婷婷俺| www久| 啪啪色区| 丁香婷婷六月激情综合| 婷婷精品视频| 激情五月婷婷色色| 五月丁香六月婷婷综合免| 九九热10| 五月天丁香啪啪啪啪| 久久多色| 中文网av| 日本人人超碰| 五月综合久久| 亚洲操操操| 蜜桃婷婷丁香综合久久开心亚洲| 日韩色色色色色| 超碰在线超碰| 丁香六月天婷婷| 五月天色在线| 黄色成人网站在线播放| 日日噜噜久久婷婷五月天| 玖玖精品视频99| 九九操操| 久九男女天堂| 26uuu国产色| 激情网 五月天| 夜夜谢天天干| 九九热在线观看6| 日日爽日日爽| cao视频,现在观看| 九九久久这里只有精品XB| 伊人久久婷婷| 日韩黄色电影| 五月天激情婷婷小说| 99性爱视频| 久/久精品99看9| 五月丁香免费视频| 色色五月天丁香| 五月丁香六月激情综合欧美| 二色av| 99精品视频在线6| 亚洲操操操| 婷婷久久色| 婷婷中文字幕在线|