免费国产精品自在自线-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
返回資訊列表
婷婷丁香激情五月天色色| 色综合色色| 色五月激情综合网| 日韩精品一品二区三区的使用体验| 亚洲色在线观看| 久久九九蜜| 色色色综合色| 日韩人妻无码精品| 婷婷丁香在线播放| 国产精品色一哟哟| 深爱激情AV| 色天堂A| 久久99久久99久久99| 任你爽视频| 五月婷婷色播| 26uuu日韩| 婷婷五月天无码熟女| 亚洲AV第二区国产精品| 99久久精品国产色欲| 国产午夜精品一区二区三区四区| 欧美日本日韩| 日本无码专区| 天天狠狠综合精区| 日本女色人人| 婷婷五月色播天| 激情五月天婷婷| 色色婷婷丁香| 亚洲丁香花色| 色五月在线播放| 九九热re99re6在线精品| 亚洲色欲AAAAAA| 国产乱妇乱子在线播视频播放网站| 久久综合中文字幕| 亚洲色啪| 另类小说色婷婷| 99玖玖在线视频| 激情九九这里只有精品| 婷婷五月花丁香| 四色女婷婷| 五月色丁香成人| 99色在线观看免费| 久久久月丁香| 麻豆五月丁香婷婷| 免费观看的婷婷五月视频在线| 色婷五月| 天天色视频| 可以看的AV网站| 色色狼人综合| AV电影在线播放| 99热官网| 五月丁香啪啪| 国产成人精品一区二三区熟女在线| 婷婷五月色| 色综合综合色| 另类少妇人与禽zOZZ0性伦| 99热这里只有精品22| 日韩综合久久| www.超碰在线| 伊人久久丁香狠狠婷婷综合香蕉 | 日日干综合| 丁香六月激| 六月丁香花婷婷| 99亚洲天堂| 一起草无码视频| 99在线观看视频免费| 五月丁香六月婷婷亚洲天堂网站| 久久机热这里只有 | 欧美成人A片AAA片在线播放| 亚洲婷婷激情综合激情999精品| 婷婷爱五月天| AV九九| 深爱激情五月天| 超碰碰碰碰| 国产成人精品一区二三区熟女在线| 开心五月婷婷| 任你搞在线观看视频| 九九久久免费视频44| 97婷婷久久丁香| 99热最新精品| 日 日干 日日做| 亚洲国产成人裸舞| 色综合久久88色综合天天99| 国产乱人偷精品人妻A片| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 99色在线| 九九中文字幕九| 激情AV在线| 日本熟女视频一区二区| 色丁香婷婷| 久久丁香综合| 成人免费黄色短视频| 日逼影音先锋男人资源站| 五月丁香趴趴| 狠狠色丁香99| 免费播放片大片| 精品久久艹| 精品久久久久成人码免费动漫 | av在线资源| 九九在线视频| 99资源在线视频| 婷婷六月丁香开心深深爱| 婷婷六月色情| 香蕉操亚洲| 操一操干一干| 日韩啪| 玖玖资源网站最新站| 婷婷激情六月| 丁香亭亭激情四射| 五月婷婷成人w| 狼人婷婷综合| 激情久久丁香| 五月婷婷婷婷| 狠狠色综合无线观看| 色婷婷综合视频| 99热99热99热99热| 在线免费视频caop| 精品福利911| 色伊人婷婷| 超碰操日| 丁香五月婷婷综合网| 激情亚洲网| 久久女人九九| 婷婷午夜天| 久久久亚洲精品一区二区三区浴池 | 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 婷婷另类开心| 激情深爱五月天| 九九综合网色全集 | 日本无码专区| 欧美天天干五月丁香| 99re这里只有| 久久精品五月天| 激情五月丁香六月婷婷| 182.t午在线观看| 婷婷五月综合欧美在线播放| 大香蕉婷婷| 色狠狠综合网| 91综合国免费久入| 97在线视频观看| 97色片| 色婷婷瘦婷婷日韩| 综合AV在线| 色婷婷久久7777| 中文字幕性爱丰满| 亚洲中文AV| 五月婷婷狠狠干| 日韩丰满少妇无码内射| 人妻尝试久久久久久久久久久久| 丁香五月-激情综合| 日韩 欧美 国产 一区 二区| 九九这里有精品| 生活片五区| 久久WW| 99热99| 另类视频五月天| 国产女生爱爱AA| 狠狠色综合精品视频在线| 色婷婷8| 五月婷婷伊人在线| 婷婷色偷拍| 狠狠草狠狠草| 99操碰| 91久久| 九九综合伊人| 另类少妇人与禽zOZZ0性伦| 深爱激情四射| 超级97碰碰| 精品久久这里热66| 99re热| 丰满老熟妇BBBBB搡BBB| 99视频在线精品| 五月丁香久久色| 国产激情在线| 99热视| 五月婷婷伊| 亚州色色色| 丁香五月天激情四射网| 五月丁香大香蕉| 亚洲五月天狠狠| 激情六月婷婷啪啪| 五月婷婷丁香| 激情网五月婷婷| www.99热这里精品| 免费观看的av| 99热这里是精品| 色情五月丁香| 碰人人97| 91碰碰碰| 狠狠色噜噜狠狠狠狠综合| 2050人人操免费工开爱| 一二区成人电影| 丁香激情网| 亚洲 五月 婷婷 成人| 人妻六月天| 99热主页日本| 欧美人人草| 97资源碰碰| 风流少妇A片一区二区蜜桃| 色五月首页| 五月丁香六月婷婷啪啪| 国产亚洲成人综合| 98国产精品综合一区二区三区| 五月天婷婷爱| 色五月六月婷婷| 亚洲视频五区| 99九九中文字幕视频| a在线观看| 婷婷五月激情天| 26uuu欧美日韩| www。五月,com| 97精品欧美91久久久久久久| 西西4r午夜剧场| 欧美乱码国产一级A片| 久久狠色噜噜狠狠狠狠97| 996黄色片| 婷婷深爱五月| 爽极品色| 久久久久久人妻| 天天干天天干天天干天天干天天| 色婷婷丁香网| 综合久| 色综合久久8| 欧美激情综合| 开心激情综合| 99爱在线免费视频| 日韩啪啪网| 99视频这里有精品免费观看| 777精品成人a v久久| 粉嫩av蜜桃av蜜臀av| 五月婷婷 自拍| 丁香伊人综合| 国产夫妻操逼内射视频| 91碰碰碰| 99色色热热| www激情网站| 久久XX日本综合| 九九色色| 欧美69久成人做爰视频| 2025超碰| 婷婷丁香激情五月天色色色| 懂色av粉嫩av蜜臀av| 日日天天干| 日韩另类在线观看| 色综合九九色综合88| 79色色色色| 五月天久久成人| 婷婷欧美偷拍综合| 婷婷免费无视频| 26uuu美女三级视频| 超碰成人电影| 97在线视频观看| 婷婷丁香97| 欧美日本国产欧美日本韩国99| 六月婷婷中文字幕| 色婷婷先锋| 99热免费| 丁香五月香蕉| 午夜无码熟熟妇丰满人妻 | 91超级碰碰| 九九99久久| 99热97| 亚洲综合激情五月久久| 精品一二三区久久AAA片| 免费视频无码| 亚洲天堂色| 一级韩国产精品毛| 丁香五月综合激情啪啪| 九九99在线观看视频| 激情综合网丁香| 人人色人人摸人人看| 99惹在线精品免费观看| 亚洲色vA| 亚欧州精品视频| 色色色色综合网| 亚洲日日日| 99精品偷自拍| 青青艹b| 激情文学第四色婷婷丁香五月| 中文字幕激情综合| 99超在线| 丁香五月伊人| 久久综合九九| 青青色com久久| 丁香五月开心亚洲| 五月丁香直播| 日本一级特黄大片AAAAA级| 色九亚洲| 九九99九九精品免费| 国产三级在线播放| 激情五月天色| 日本狠狠网| 五月丁香999| 狠狠操狠狠插| 人人性久久| 天天色·欧美| 五月婷婷视频在线观看| 99性爱| 99热全是精品| 五月丁香狠狠爱婷婷综合| 这里只有免费精品| 91chinese在线| 丁香婷婷五月激情四射网| 免费亚洲婷婷中文字幕| 色婷婷五月天视频在线| 人妻久久久久久| 大香婷婷| 蜜桃婷婷丁香| 思思热在线视频精品| 国产精品A片在线| 99色综合网| 五月丁香在线看| 婷婷五月激情网| 国产探花一片区| 五月丁香香蕉| 热99在线精品| 婷婷五月另类网站| 亚洲XX日本| 一月婷婷色色| 色99超碰| 五月丁香另类网| 精品久久99| 99精品久久久久久久久| 狠狠色激情在线| 久久9精品| 久久99大| 五月婷婷伊人久久| 色五月激情五月| 色一情一乱一乱一区91| 婷婷五月综合啪| 激情综合丁香六| 亚洲一个色| 久99在线视频| 国产九九一区二区三区| 99久热这里只有精品| 久热这里| aaaaaa片| 亚洲成人免费电影| 久久亚洲网| 六月丁香综合| 色色色婷婷五月| 五月天国产婷婷精品视频在线| 99精品久久| 欧美一级色| 五月天激情小说网| 色婷婷久久综| 婷婷色丁香五月| 日韩五月婷婷| 久久色亭亭五月天| 欧美人久久| 五月天偷拍| 五月天激情综合网| 五月婷婷|欧美| 9色在线视频精品观看| 色婷婷香蕉丁丁网| 九月婷婷在线观看| 丁香五月天亚洲视频| 久久久免费图片视频| 五月丁香婷爱在线| 五月丁香婷婷婷激情爱爱| 亚洲综合色棒| 欧美婷婷精品激| 精品色| 青草少妇激情| 日本 色综合| 婷婷日日夜夜| 九热免费视频| 尔尔AV一区| 777色婷婷爱五月| 久久99热这里只有精品| 夜夜天天久久婷婷| 六月丁香开心婷婷欧美| 在线观看av网站| 91成人品| 九九九九操逼| 五月婷视频在线| 久久婷婷色情7777网站| 亚州美女| 91午夜激情| 3p久久| 久久婷婷五月天懂色| 九九精品在线视频观看| 热久久999| 五月丁香六月婷婷无码| 婷婷操逼| 五月丁香婷久久| 狠狠色成人影片| 色婷婷综合久久久久| 99热这里只有精品8| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 国产AV熟妇人震精品一品二区 | 国产白丝在线一区| 九九视频这里只有精品在线播放| 色综合99色| 激情视频综合| 天天拍久久| 亚洲国产色婷婷| 亚洲av成人在线| 99热 免费| 玖玖@三月天天丁香婷婷| 色婷婷久久综合久色综| 婷婷免费成人视频| 婷婷五月丁香A∨| 五月天色图| 五月婷在线色视频| 五月丁香香蕉| 91九色无码内射| 噜噜噜狠狠色综合| 丁香五月天在线| 97干在线| 碰碰操91| 99亚洲视频| 91超碰在线观看| 婷婷丁香在线播放| 五月深情久久| 日日夜夜天天| 九九99九九99偷拍视频免费看| 视频一二区| 日本一毛片| 99A级片| 五月天三级久久| 五月丁香综合激情| 成人 在线 日韩| 色性五月天| 久久免费精品小视频| 天天色凹凸| 色五月婷婷基地| 99亚洲精品视频| 丁香五月婷婷六月婷| 99精品国产在热久久婷婷| 激情五月婷婷| 91久久久久久| 99视频精品在线| 婷婷综合视频| 色婷五月天激情| 色五月丁香一区在线| 99热这里都是精品| AV无码免费| 国产精品A片在线| 狠狠精品干练久久久无码中文字幕| 婷婷五月天影院| 五月婷婷丁香综合网| 日本色婷婷久久99精品91| 高清视频一区| 97人人看| 成人婷99最新| 99re在线精品视频| 色色五月天丁香| 亚州色综合| 婷婷五月综合色小姐小说| 成人免费120分钟啪啪| 大香蕉久操| 日本久久人| 人妻精品一区二区三区| 五月天国产| 色偷偷色婷婷| 丁婷婷五月天在线播放| 色五月中文网| 五月婷婷丁香六月| 婷婷成人综合| 99热这里只有精品4| 激情综合网五月婷婷| 欧洲亚洲免费视频9| 色色五月天婷婷丁香| www.五月丁香| 久久精品99久久久久久| 久9视频| 91chinese在线| 三级三久久线久久99久目本WW| 噜一噜在线| 超碰猛烈的性猛交| 久久久中文| 色五月天在线观看| 欧美成人精品三区综合A片 | 五月天综合在线网| 综合另类激情| 国产婷婷综合在线免费视频| 殴美日比视频| 色婷婷六月| 91九色精品熟女内射| 亚洲激情综合| 内射 无码 伊人| AV六月丁香| 色综合色色色色| 97操碰碰无码视频| 丁香婷婷人妻综合网| 97久久香草精品视频| 人妻 性久久久久久| 婷婷五月视屏| 99热在线精品观看| 丁香久久在线| 99综合熟女| 99精品久久| 婷婷操逼网| 五月丁香天堂网| 久久综合影院| 中文幕无线码中文字蜜桃| 91嫩草国产线观看亚洲一区二区| 五月天婷婷色色网| 第六色在线| 久久五月综合| 天天插天天爱| 伊人激情网| 五月天久久婷婷| 插插插色综合网| 热99这就是精品视频| 99色婷婷| 色444综合网| 热九九精品| 另类国产综合| 九九青青草成人| www,999日本色| 99伊人性爱在线影院| 国语对白性爱视频播放| 久久久久久久久99精品| www.金莲av| 久热综合| 五月天婷婷在线播放| 色五月综合| 狠狠色综合网站久久久久| 亚洲中文字幕AV| 五月欧美色色五月| 色色亚洲五月天| www91色网站| 五月色综合网欧美网| 五月天综合影院| 日日干天天| 亚洲欧美国产A片免费观看| www.主妇. com| 影音先锋91| 婷婷中文字幕网站| 亚洲日韩人妻操逼| 在线观看中文字幕| 五月天婷婷操逼视频| 天天情色综合网| 激情五月天色色| 97操碰视频| 久久ab| www.99热国产| 天天草婷婷五月| 色婷丁香| 午夜激情婷婷| 97色女人在线| 久久九九re热| 天干夜夜操| 亚洲春色奇米影视| 丁香五月天婷婷久久| 天天综合在线网| 亭亭五月基地在线| 亚洲视频99| 99热草草| 99日这里只有精品| 激情性爱五月天网页| 99这里只有精品国产| www.99色| 狠狠做五月| 中文字幕在线免费| 久婷| 色色日本| 日本a片网址| 色吧综合网| 色婷婷久久久| 激情五月天婷婷五月天| 久久五月丁香婷婷| h在线看免费版在线看| 色情五月综合婷婷| www超碰| 久久综合爱| 婷婷五月天黄色| 99a级片| 人人97碰| 婷婷丁五月| 另类小说色婷婷| 丁香五月网站| 欧洲第一无人区观看| 六月色婷婷欧美| 极品少妇XXXX精品少妇偷拍| 五月永久激情| 狠狠色综合久久久久| 丁香五月综合网亚洲综合欧美狠狠| 欧美日本国产| 日日操天天操| 九九性视频| 91久操| 丁香五月AV综合激情| 99超超碰| 激情噜噜噜| WWW99热| 青青草成人网| 久久深爱激情网| 涩玖玖免费视频| 99色色网| 激情五月婷婷免费视频| 久久大大香| 久青草影院| 超碰人人操在线| 欧美激情五月天| 精品无码99| 久艹大香蕉| 色婷婷综合视频| 五月婷婷手机在线| 综合激情在线视频| 婷婷色情 | 亚州操人在线视频| 五月婷婷与六月丁香图片激情| 夫妇交换刺激做爰| 天天日天天舔| 日日想日日夜日日操| 五月丁香六月婷婷激情四射| 亚洲第一第二网站| 小视频久久久aaa| 五月香婷婷| 精品日本视频444| 天天操加勒比| 凹凸操Av| www.激情在线| 99色五月| 日日夜夜九九| 狠狠干天天日| 思思热这里只有精品| 人人操Av| 亚洲综合一区二区| 五月桃花网综合| 国产在线中文字幕| 五月婷婷丁香俺日污视频| 97亚洲色 torrent magnet| 五月天婷婷激情四射综合| 99综合网| 久久 婷婷 五月天| 亚洲夜夜操| 99小精品| 99精品久久| 久草嫩草在线观看| 久热婷婷综合| 99久久这里只有精品| 99热思思| 五月丁香激情婷婷| 天天碰天天插天天操| 国产激情久久| WWW.99视频| 丁香五夜激情四射夜夜夜| 五月天婷婷小说| 97碰| 影音先锋91| 吉澤明步Av一區二區| 第四色婷婷最爱| 色综合99| 激情五月天色网站| 久99久在线观看| 丁香花五月天| 少妇激情五月天| 国产日比| 啪啪综合网| 精品国产人人爱人人| 日日日日日| 美女va| 丁香五月在线播放| 久久久久久草黄色片AV在线观看| 婷婷九月| 丁香伊人综合| 黄色av网站在线免费播放| www.色擼擼.com| 成人性生活免费观看。| 婷婷五月天免费视频| 五月天小说激情| 五月天综合婷婷| 五月天丁香欧美激情| 精品丁香五月天在线播放| 丁香六月婷婷社区| 久久9精品视频| 天天射美女| 国产这里只有精品| 丁香亚洲婷婷五月| 男人的天堂99| 91婷婷色| 全部老头和老太XXXXX| 五月天堂婷婷| 懂色av粉嫩AV蜜臀AV| 五月婷婷官网色| 超碰在线观看9| 老司机日日夜夜青草| 天天激情视频| 婷婷激情五月天激情小说| 亚洲操操操| 五月婷婷色色色| 色婷婷六月| 丁香五月天综合网| 婷婷激情人妻| 这里只有精品视频在线| 伊人久久五月天综合| 99热色婷婷| 久久机热/这里只有精品| 婷婷丁香五月激情图片| 欧美久人人| 精品色| 色婷婷九月综合| 色www.con| 日本色婷婷| 都市激情小说婷婷| 色婷天天| 成人做爰黄A片免费看直播室男男| 狠狠色综合久久| 超碰操网| 99网址在线观看| 97干网站| 久久AV电影| 婷婷的99视频网站| 97干在线视频精品店| 99玖玖免费视频| 久久有码| 婷婷久热| 婷婷婷五月香蕉| 996er热| 九九热99热| 中文字幕日本最新乱码视频 | 综合五月丁香六月婷婷| 丁香五月天欧美成人| 99视频精品8| 天天操综合网| 亚洲字幕AV一区二区三区四区| 色婷婷综合在线| 婷婷日在线观看| 性天天中文网| 99久久综合网| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 99精彩视频| 99精品综合在线| 久久婷婷五月天激情新地址| 婷婷五月花丁香| 久久婷婷亚洲| 色婷婷AV在线| 激情婷婷网| 色狠狠色| 婷婷九月综合| 夜丁香综合| 777精品久无码人妻蜜桃| www.AV在线| 婷婷丁香五月天小说| 亚洲综合色婷婷| www99xxxx五月丁| www.狠狠色.com| 久久激情视频| 99啪啪网| 色色日本| 中文AV网站| 开心婷婷五月天电影院| 婷婷色色五月天| 久草丁香婷婷五月天婷| 夜夜撸天天日| 人妻内射一区二区在线视频| 久久九九99| 超碰国产在线观看| 亚洲第二AV| 伊人久久五月天| 成熟妇人A片免费看网站| 国产亚洲在线观看| 久99久精品| 九九www| 综合色激情| 综合福利网| 婷婷色色播五月天| 嫩草AV久久伊人妇女超级A| 久久综合九九| 激情小说视频图片| WWW.久久久久久久| 91精品国产99久久久久久天美| 丁香九色不卡aaa| 婷婷中文字暮| 色综合9| 青青草原福利在线| 久久久91精品| 五月丁香做爱视频| 久草 tingting| 人人草人人视| 免费观看2018www黄色操逼网站| 婷婷五月图片小说网| 97色射| 五月婷婷激情四月| 色色97丁香婷婷五月天| 五月婷亚洲精品| 激情五月瑟瑟| 女人天堂AV| 操操自拍| 噜噜视频| 色国产五月| 热91久| 激情综合色婷婷啪啪六月天| 五月丁香亚州综合网| 激情开心五月天婷婷基地丁香社区| 99热最新国内| av无码电影| 成人在线网址| 五月婷婷在线视频免费观看| 五月丁香色综合| 婷婷五月天深爱| 成人AV片播放| 女人天堂AV| 亚洲操逼片| 中文字幕在线观看视频www| 无码中文一区二区三区| 91色五月在线观看| 婷婷五月色激情欧美激情| 9久热在线视频精品| 亚洲永久免费| www.狠狠狠狠| 精品视频网| 人妻激情综合| 五月色 亚洲| 色婷婷色丁香色欲av| 在线观看婷婷5月| Av大香蕉| 日本婷婷激情四射中文字幕在线观看| 人人干av| 五月丁香综合啪啪啪啪啪| 大香蕉220| 噜一噜在线| 亚洲婷婷丁香五月在线| 亚洲丁香婷婷| 91碰碰碰| 日撸夜撸日操| 五月丁香久久网| 免费看欧美成人A片无码| 婷婷激情小说| 国产伊人五月天| 99视频极品在线香蕉| 九九Av| 国产精品婷婷午夜在线观看| 五月色婷婷影院| 99人妻碰碰久久久禁片| www.91在线观看| 丁香五月天天日| 夜色综合网| 欧类av怡春院| 国产 亚洲 在线| 丁香五月婷婷成人网| 91超级碰在线视频| 99亚洲精品综合在线| 五月天激情四射| 五月天婷婷中文字幕在线播放| 色婷婷婷婷| 九九无毛| 激情丁香五月婷婷| 色婷婷狠| 丁香五月色欲| 色婷婷视频| 97干在线播放| 丁香狠狠色婷婷久久无码视频| www.婷婷五月| 中文av网| 丁香综合网| 思思99热热热99| 日韩一级网站| 婷婷五月天综合久久日| 极品人妻VIDEOSSS人妻| 婷婷射丁香| 丁香五月激情啪啪| 99色1| 天天日日夜夜爽| 色婷婷a| 91久久国产综合久久| 中文字幕有多少字| 大香蕉五月天| 亚洲欧美婷婷五月色综合| 五月婷婷五月天激情网| 精品综合五月| 日本无va视频| site:hcxsz888.com| www.jiujiujiu| 一区二区三区四区牛| 伊久大香蕉| 国产精品99久久久久久久女警| 欧美日韩91| 另类综合激情| 欧美日比视频| 99九九在线视频| 精品人妻一区| 五月六月丁香激情| 热思思| 色五月丁香五月婷婷五月成人网| 五月丁香婷中文字幕| 99热这里只有精品10| 久热只有这里有精品| 91精品久久久久| 亚洲中文字幕AV| 色婷婷亚洲| 黄网网站在线播放| 婷婷五月激情图片| 丁香五月欧美成人| 久热大香蕉| 丁香综合婷婷开心激情网| 五月婷婷影院| 另类天堂| 五月婷婷激情综合在线| 九九视频网| 99这里只有精品国产| 538在线| 五月婷婷和六月| 婷婷精品在线| 久久精品视频9| se99视频| 天天综合五月| 五月天另类小说| 大香蕉久操| 国产亚洲精品久久久久苍井松 | 亚洲五月天色色| 狠狠色噜噜狠狠| 99久在线观看| 成久综合视频| AV五月丁香| 亚洲色综合性| 色五月av| 九九久久综合| 五月丁香六月激情综合| 激情综合丁香六| 婷综合六月| 97人人操| 久久网站观看免费欧洲国产| 五月丁香婷中文| 五月丁香色| 久久多色| BBWCUCKOLD精品熟妇| 久久婷婷艹| 欧美性久| 99极品视频| 日韩视频99| 99热欧美| 狠狠ri| 日本久久性| 26uuu.| 五月婷婷六月丁香综合| 91狠狠综合网| 疯狂做受XXXX高潮A片| 91熟妇大香蕉| 婷婷亚洲日本| 天天干com| 99色婷婷| 亚洲AV成人无码精品| 六月久久婷婷| 激情伊人五月婷婷久久| 亚洲激情网| 婷婷五月天综合网| 久久五月情| 日操| 色色日本欧美| 欧美日本免费一道免费视频 | 婷婷五月情| 99干在线视频| 密黄站| 五月天婷婷无码| 天天干天天拍| 狠狠99| 国产片色| 999婷婷综合| 五月天色网站| 婷婷五月天久久| 六月丁香成人| 五月天婷婷丁香蜜桃91| 97极品在线| 色欲色欲久久宗合网| 欧美精品999| 丁香涩涩爱| 少妇性按摩无码中文A片| enecarbon-materials.com污K127封锁请涟系@wip1688 | 99玖玖人人| 99热精品一区| 人妻操逼视频| 久久狠婷婷| 热99热9| 一起草av| 99色婷婷视频| 噜噜狠狠色综合久| 啪啪啪丁香五月| 热的国产,热的综合,热的有码 | 久久99热只有精品| 思思热在线视频精品| 丁香六月天婷婷色| 99热思思在线观看| 91中文在线| 99碰视频| 亚洲夜夜操| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 呦呦视频无码播放| 久久五月天婷婷| 九月av| 色,激情五月天| 日韩丰满少妇无码内射| 日日肏天天操| 丁香五月婷婷六月婷婷| 大香伊人婷婷影院| www.zbzhongsen.com| 亚洲操女| 91婷婷五月天综合视频| 亚洲激情综合| 婷婷色五月综合丁香| 久热9| 91丨九色丨熟女|老版| 五月丁香六月婷婷欧美综合| 五月婷婷黄色网址| 甈你aaaaa| 91se视频| 五月丁香六月婷婷亚洲| 人妻内射一区二区在线视频| 久久婷婷六月天| 亚洲色五月婷婷| 婷婷丁香五月综合| 天天干天天干天天干天天干天| 女同激情久久av久久| 五月丁香六月成人| 五月天婷婷香蕉狠狠超碰综合| 色噜噜狠狠色综无码久久合欧美 | 久久久久久人妻| 久久图色4| 久久婷婷五月综合啪| 4399在线观看免费高清黄色视频| 激情综合激情综合| 久热超碰91| 97人妻碰碰碰久久香蕉| 色色五月天网站| 99精品在线观看| 欧美色图45678| 九九久久综合| 国产26uuu视频| 婷婷丁香久久网| 另类五月激情| 五月婷婷六月综合| 操碰99| 丁香婷婷六月婷婷六月婷婷六月婷婷| 玖玖婷婷五月天| www.五月婷婷久久.com| 国内熟女黄色系列| 久久这里只有精品8| 91凹凸在线| www.操.com| 伊人六月丁香婷婷| 国产综合A片| 久久电影4399| 激情五月天在线观看婷婷| EEUSS鲁片一区二区三区| 五月天婷婷乱| 成人在线视频一区| www.五月婷婷久久.com| 人妻AV在线| 五月婷婷久| 五月丁香婷草| 色噜噜婷婷| 无月播播激情在线观看视频| 97黑人精品区| 久久久久久久人妻| 特级片神马电影| 日韩欧美成人片| 99热精品免费| 九一99| 99视频久久| 成人αV视频免费观看| 久久国产色| 婷婷和五月天| 久9热在线免费观看| 激情久久肏屄视频| 26uuu亚洲欧美另类| 77777亚洲午夜久久| 丁香啪啪| 狠狠摸狠狠摸| 五月婷婷 欧美| 日本道久久91| 99精品网| 第四色五月天| AV天堂淫乩| 97色婷婷在线观看| 国产做爰视频免费播放| 五月丁香在线| 色五月婷婷视频| 色月九九| 丁香五月婷婷总啪啪| 91精品综合久久久久久五月丁香| 久久久久久五月天| 另类激情五月天。| Www.久久| 人人操AV| 久婷婷婷| 综合久久六月| 秋霞三级影视资源| 国产老熟妇亲子乱对白| 婷婷五月花.97| 综合久久99| 日本va欧美va国产激情| 26uuu亚洲色| 色综合综合色| 四川操逼站| 日本4399天堂中出| 丁香色婷婷| 这里只有精品久久| 这里只精品热在线18| 亚洲激情无码久久| 伊人婷婷综合| 五月丁香六月婷婷综合| 不卡在线超碰| 色色99| 天天日,天天插| 九九热精品视频在线观看| 五月天激情小说婷婷基地| 亚洲另类婷婷五月丁香在线播放| www.sebowuyue| 狠狠色婷婷丁香五月| 艹B高清无码| 丁香五月天社区| 亚洲综合激情五月久久| 九九 激情 网| 天天爱天天做天天| 婷婷丁香综合| 精品人妻久久久| VA国产在线综合网站| 婷婷五月大| 亚洲天堂热| 丁香五月影视| 91超级碰在线| 色五月婷婷激情基地| 九九热99久久99| 五月色激情综合网| 色婷婷AV久久| 九九色插| www.久久久久久久久久.com| 97人人操人人插| 极品精品一区二区三区在线| 大地9中文在线观看免费高清| 国产精品美女| 婷婷综合五月天| 97色色综合| 久草热在线视频| 99热激情| 九九久久99| 99热精品在线| 国产69久久久欧美黑人A片| 欧美S码亚洲码精品M码| 99精品偷自拍| 99爱免费视频在线观看| 色的色综合| 激情丁香网| 人妻精品久久久久久久| 天天xxxxxx天天日| 亚美欧色影院| 激情五月六月| 丁香婷婷六月天| 91超碰人人操| 五月婷婷开心网| 韩国真做片在线观看| 国产免费性爱| 色吧网综合| 香蕉97碰碰碰超视精品| AV色婷婷| 色噜噜狠狠色综合无码久久欧美| 激情图片亚洲| 丁香五月狠狠综合欧美| 五月婷婷五月天亚洲无码| 色婷婷五月中文字幕在线dvd| 色五月天成人| 九九九九国产| 九九99久久| 91无码一起草| www.9797国产| 狠狠色丁香久久久婷| 一本道综合网| 激情综合网五月激情| 九九这里是免费的视频5| 熟女激情五月天| 三人荫蒂添的好舒服A片| 婷婷伊人综合| 一本久道综合99| 五月丁香激情五月天| 欧美天天干天天草| 五月丁香综合影院| 五月天婷婷社区| 9视频在线成人网站| 久人操| 日韩一区二区在线播放| 性生活久久人妻| 欧美精产国品一二三区| 狠狠狠狠狠狠| 日日操夜夜操中国无码| 色色色婷婷五月天| 久久狠色噜噜狠狠狠狠97| 婷婷六月啪啪| 色五月 五月婷婷| 婷婷五月丁香成人网| 色玖玖综合网| 亚洲 无码 中文字幕 中出| 狠狠色噜噜狠狠狠888| 国产成人亚洲综合A∨婷婷| 色婷丁香91| 91九色视频| 久狠日av| 这里只有精品视频在线| 色色热日| 激情五月黄色小说| 五月情婷婷| 色五月成人| 色色色色色综合| 欧美天天综合网站上去吧| enecarbon-materials.com污K127封锁请涟系@wip1688 | 另类激情中文| 99日本视频在线观看专区| 天天爽在线视频| www.思思99热| 久久免费9| 99热99这里有免费的精品| 91啪啪网| 久99婷婷色综合| 99re在线观看| 色五月人妻| 国产做爰视频免费播放| 激情婷婷丁香五月天| 五月婷婷丁香色播网| 大香蕉综合| 色婷婷AV在线| 精品无码99| 粉嫩AV久久一区二区三区| 97人人做| 丁香六月欧美| 激情五月综合网丁| eeuss人妻| 干一干xxxx| 色婷婷aV四虎| 婷婷五月激情欧美大胆视频| 色色网站在线| 五月婷婷婷综合网| 天天插AV丝袜中| WWW色五月天| 激情综合久久| 丁香婷婷色情| 国产五月天欧美色| 激情图片亚洲| 日韩黄黄| 婷婷91| 欧美久久婷婷| 99色色网| 伊人久热91| 开心五月天激情网站| 99精品视频免费观看近期发布| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 欧美六月| 九九人人精品| 婷婷黄色五月| 99热无码| 91女人18毛片水多国产| 激情亚洲婷婷六月| 国产精产国品一二三在观看| 激情婷婷五月亚洲| 色婷婷五月在线| 久久9久| 婷婷丁香熟妇综合网| 综合久久久| 色综合久久中文| 国产超碰人人| 激情五月天开心| 九九综合网色全集| 婷婷五月天综合AV| 成人网在线视频| 99亚洲精品| 99碰网站| 亚洲啪啪视频| 色五月综合网| 五月天久久婷婷| 色久婷婷五月| 欧美交换配乱吟粗大25P| 狠狠狠狠狠狠草| 男人的天堂婷婷色五月| 2025年最新亚洲在线欧美| WWW、日本色丁香、co m|