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
返回資訊列表
免费九九热| 婷婷五月天中文字幕.| 激情五月天综合| 丁香六月婷婷色播| 色色色com| 欧美人妻一区二区| 久色成人| 色综久久AV| 热久久婷婷| 婷婷精品免费久久| 91九色精品| 国产Va视频| 色婷婷玖玖影院| 人妻22p| 婷婷五月天免费视频| 婷香五月| 欧美99视频| 99丁香五月| 99综合免费视频| 丁香五月av在线| 婷婷成人网五月天| 狠狠搞五月天| 中文精品久久久久人妻不| 日韩av高清| www.色99| 天天综合网站| 五月丁香六月激情| 亚洲色综合| 五月天狠狠干| 天天色激情| 麻豆科斗777| 九月久久婷婷| 4399亚洲视频| 99九九热在线观看| 91操片| 99超级超级超级碰| 一婬一伦一区二区三区| 涩涩婷婷五月| 9l视频自拍九色9l视频在线观看| av在线免费网站| 激情AV综合| 色色丁香| 影音先锋秋秋五月婷婷| 久久看九九90| www.91在线看| 久久精品99| 久久婷婷网站| 丁香色五月婷婷17C| 九九综合网色全集 | 99综合自拍| 99热97美女| 日韩一区二区A片免费观看| 亚洲操逼网| 天天综合 99久久婷婷| 99这里只有精品|v| 色综合久久888| 天堂综合久久 | 日本色99| 丁香五月色播中文在线播放| 久久这里99| 五月激情久久综合| 99热免| 99热成人在线观看| 日本美女上人| 亚洲精品一区中文字幕乱码| 99热午夜精品| 五月天婷婷爱| 人妻肉射免费观看| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 五月婷婷五月天| 久久五月激情| 97好吊操| 网色99| 久久婷综合| 婷婷五月综合在线| 无码AV大香线蕉伊人| a毛片二逼wwwwwwwwww| 青青草原亚洲久| 五月天大香焦| 七七九九色色| 日韩aaaaa| 久99在线视频| 久草x色在线观看99| 色色九区| 欧美性久| 久9综合| 六月丁香啪| 五月天激情四射网站| 9 1超碰九色| www.25五月婷婷| 亚洲色情一区二区三区四区| 久操激情| 婷婷五月丁香色色| 色婷婷最爱五月| xxx.色婷婷| 久婷| 色综合久久88色综合天天| 超碰人人91| 91艹人| 五月丁香777| 色婷婷综合网| 99热久久日本| 人妻精品久久久久久久| 九九亚洲视频| 精品久热| 涩综合网| 哇嘎成人久久| 五月激情久久综合网| 超碰二区| 99久久视频| 色婷婷成人在线| 色五婷婷开心缴| 97热这里只有精品| 色色五月天网站| 激情婷婷丁香色情五月天| 99久久www| 五月精品99综合| 色播六月| 超碰色综合| 国外亚洲成AV人片在线观看| 久这里只有精品99| 五月天播播| 婷婷五月六月丁香| 丁香色婷婷| 激情四射五月天| 色欲久久久久久综合网综合网| 婷婷六月天精品| 九九热视频99| 91玖玖| 婷婷色成人| www.久久| 激情婷婷丁香色情五月天| 色99热| 久久综合九色综合88i| 激情五月天婷婷久久久久久久久久久| 亚洲中文字幕网| 九九99九九精品视频| 日韩黄黄| 日本人妻伦在线中文字幕| 中文资源在线a | 这里只有精品网站| 亚洲无码性爱| 六月激情婷婷| 超碰97免费在线| 婷婷五月色情天| 懂色av粉嫩AV蜜臀AV| 激情五月深爱五月| 日本黄色一级| 午夜做爱影院| 色色五月天网站| 日日撸夜夜操| 五月激情视频| 亚洲亚洲人成综合网络| 激情五月天婷婷视频| 久热这里| 久热视频这里只有精品68| 99亚洲天堂| 婷婷五月播| 免费观看亚洲AV片| 亚洲视99| 久久久久久五月天| 99热思思| 五月婷婷中字在线| 久热99视频在线观看| 五月丁香六月合| 99久久99综合| 五月丁香六月色| 人妻中文av| 伊人五月天| 艹天天射| 天天骑天天操| 婷婷无码视频| 99热播放| 610018岁成人视频| 狠狠色大香蕉| 五月六月丁香激情视频| 97操在线| 97人人操人人| 激情狠狠丁香月| 亚洲精品**不卡在线播he| 六月丁香婷婷五月| 亚洲av网站| 五月天激情国产综合婷婷婷| 丁香五月综合网亚洲综合欧美狠狠| 狠狠 久久| 亚洲综合视频网| 狠狠色丁香| 激情婷婷| www,色婷婷| 国产色丁香| 午夜成人片400| www色婷婷com| 五月天激情网图片 - 百度| 欧美日本韩国亚洲| 丁香婷婷六月天| 激情精品久久| www.综合久久.com| 久久这里只有精品视频15| 五月天婷婷综合| 丁香花五月天激情| 五月丁香狠狠爱婷婷综合| 五月激情婷婷播播开心| WWW.桔色成人.COM| a色色色色色| 五月美女婷婷风骚| 色色色色网站| 狠狠色大香蕉| www,26uuu,c0m,色情| 情色五月天网站| 国产人妻人伦精品一区二区| 色五月激情网| 色婷婷久久综合中文久久一本| 99在线观看| 99视频热99| 丝袜大香蕉| 天天爽天天摸| 99热九九在线| 26uu| 这里只有精品,日韩视频| 婷婷五月日本| 日本波多野结衣视频| 一起草Av| 日本WWW九九九| www.五月天婷婷姐姐| 国产综合视频婷婷| 伊人九九热| 亚洲精品又粗又大又爽A片| 五月丁香在线| 丁香五月婷婷六月丁香| 丁香五月五月婷婷五月天激情四射| 九九综合色| AV大片在线观看| av国产精品| 九九久久综合| 九九aV| 丁香五月成人社区| 久热视频这里只有精品| 五月婷婷网站| 五月丁香在线婷婷美女| 97色婷婷五月天| 六月丁香深深爱| 五月丁香日本一抹本| 丁香六月激情综合网| 国产一区二区av免费| WWW.婷婷| 久9热| 亚洲AV网站| 日本va欧美va国产激情| 婷婷五月天国产在线播放| 九月婷婷丁香| 激情六月婷| 日韩综合大黄| 亚洲成人婷婷| 91干在线| 五月天综合婷婷| 97人人操人人| 六月激情综合| 七七婷婷综合| 亚洲天堂有码| 日韩av在线免费观看| 视频久久9| 五月香蕉网| 免费成片在线观看| 丁香九月综合| 开心五月婷婷五月| 婷婷婷五月天最新综合你懂的| 久久五月丁香伊人青草| 婷婷五月天亚洲图片| 99色色最新视频| 婷婷四色五月| 99综合| 99热天堂| www.99热| 日韩淑女人妻luan伦激情精品一区二 | 丁香狠狠操| 97五月综合网| 天天弄天天爽| 99亚洲无码| 色婷婷久久综合中文久久一本| 国产九九一区二区三区| 久久这里有精品| 99久久婷婷| 免费视频WWW在线观看网站| 久久国产一区二区三区| 丁香九月激情久久| 色婷婷成人丁香| 亚洲婷婷激情888精品久| 色色色色色色色色网站| 婷婷色五月天在线| 影音先锋一区二区资源站| 99热99| 亚洲激情婷婷| 婷婷激情五月天在线视频| 婷婷五月天资源| 99热免费精品| 五月激情综合网| 大香蕉在线99热| 五月婷婷久久久久| 久久99久久99精品免视看婷婷| 激情五月视频在线婷婷| 99热国产| 亚洲性视频| 色综合天天网| 中文字幕人妻在线| 激情涩播| 888精品福利地址| 久久99热久久99精品| 97狠狠色| 青青日韩| 丁香五月冃欧美| 日韩精品一品二区三区的使用体验| 成人va在线播放| 99精品九九| 五月丁香| 婷婷伊人综合中文字幕| 热婷婷av| 婷婷五月天激情视频| 国产色网站| 亚洲亚洲人成综合网络| WWW.天天日| 99re最新地址| 丁香婷婷狠狠97| 99在线精品视频| 5月丁香六月情| 色啪影院| 丁香花五月天激情| 99久在线观看| 五月天婷婷免费| 亚洲性色XXXXX| 99精品久久| 一本九九色| 天干天天干天天天天天| 婷婷五月天基地| 成人电影在线免费试看| 婷婷五月影院| 丁香五月综合无码趴趴| 99热99热在线| 激情综合九| 婷婷 激情 五月| 激情五月丁香五月| 91九色|疯狂|高潮|对白|| 婷婷五月天干干| 丰满人妻一区二区三区| 欧美黑人大吊| 色五月综合| 婷婷五月天激情电影| 五月天六月婷| 国产黄色av| 色五月婷婷五月丁香五月| 伊人激情| 五月天激情播播网| 丁香五月性| 丁香五月首页| 97超碰综合| 免费国产视频| 色色五月婷婷| 五月丁香六月婷婷,婷| 九九色影视| 超碰人人91| 天天综合精品| 91人妻PORNY九色大屁股| 91久久| 9月色婷婷| 97操碰在线视频| 色哟哟性爱av| 色欲色香综合网| 青草网在线观看| 在线另类| 五月丁香婷婷五月色| 五月丁香成人网| 99热这里只有精品国产免费| 大香蕉色婷婷伊人在线| 色五月天成人| www久久99| 丁香五月电影| 五月丁香伊人网| 久久91久久精品久久| 五月丁香激情婷婷综合| 99爱爱网| 日韩成人精品中文字幕| 欧洲免费视频色| 猫咪伊人AV| 五月丁香六月综合激情无码软件亮点| 色婷婷69| 国产AV一区二区三区最新精品| 天天操夜夜夜拍拍拍| 超极99精品| 五月天网站免费欧美| 亚州综合色| 99日韩| 日日天天天| 性爱激情综合网| 视频色色色色色色| 日韩色色色色色| 欧美黑人巨大性生话| 色日本网| 九九热这里只有精品556| 丁香六月婷| AAA亚洲AV| 国产avapp 网| 久久视9精| 久艹大香蕉| 激情婷婷五月天伊人在线观看| 久久精99| 五月天激情小说| 色欲色香综合网| 日本一道久久| 激情五月婷婷丁香综合网| www.婷婷六月天| 开心六月丁香五月婷婷| www,超碰| 91热视频| 成人短视频在线观看| 99青青草| 久久成人性爱| 亚洲天堂啪啪| 丁香婷婷综合影院| 无码少妇高潮喷水A片免费| 久久久人人操A V| 九九re精品视频在线观看| 好好日激情五月天| 中文字幕AV在线播放| www.金莲av| 99色亚洲| 99色五月| 日日色综合| 狠狠色丁香99| 九月丁香| 成人午夜免费电影| 永久天堂日本| 狠狠ri| 五月天综合视频| 婷婷综合五月天| 天天干天天操天天上| 亚洲在线操| 一片AV片免费播放| 五月婷婷电影院| 日本狠狠干| 五月婷婷色播| 天天做天天爽| 国产欧洲欧洲精品久久| 丁香成人色情五月天| WWW丁香五月| 97人人做| 成人欧美日韩| 九艹在线| 日本人人干| 色婷婷第四色| 亚洲AV电影美洲AV电影| 九色视频入口91| 亚洲亚洲人成综合网络| 亚洲蜜桃精久久久久久久久久久久| 色五月激情网| 久9免费视频| 婷婷激情五月综合| 丁香五月六月婷婷怡红院| 色天天久婷婷| 五月婷婷免费在线观看| 婷婷五月天性| 婷婷五月天成人网站| 婷婷 亚洲图片 丁香| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网 | 五月天丁香婷婷视频网址 | 久久精品人妻| 婷婷丁香六月| 中字幕视频在线永久在线观看免费| www夜夜| 久久婷婷综合五月天| www.久久久久久久| 色五月婷婷久久| 热久久99热欧美国产亚洲| 夜夜 操无码| 九九99免费视频| 激情五月综合| 五月丁香影院| 亚洲岛国电影| 色九九综合热99| www91在线| 久综合| 激情久久五月天| 五月丁香婷婷啪啪| 人人舔人人色人人高潮| 99热日韩| 五月激情婷婷综合| 六月丁香婷| 嫩草AV久久伊人妇女超级A| AV片一区在线观看| 成人在线网站| 婷婷六月丁香开心深深爱| 狠狠干天天内射| 五月婷婷之六月丁香| 丁香六月婷婷综合在线| 久久女人天堂| 天天射天天插天天干| 丁香五月婷婷老师网站| 久久婷婷91| 另类色视频| 五月天久久www| 五月天综合激情网| 亚洲婷婷五月天| 成人综合视频网址| 六月撸婷婷| 99热色无码| 天天天添天天操| 精品久久久人妻| 九九aV| 丁香五月婷婷免费视频| 综合久久综合| av中文网站| 五月天激情图片| 欧洲色色| 黄久久久| 人人操人av| 国产免费一区二区三州老师F1F1| 人妻丰满精品一区二区A片| 岛国资源站| 日日爱678| 久久激情五月天| 久久综合丁香激情五月| 成人无码中文| 天天天天天色| 亚洲AV成人在线| 久久丁香综合香蕉| 丁香六月婷月91婷月| 六月丁香VA| 狠狠色色| 欧美综合五月丁香六月婷| 久久五月婷天天干| 婷婷五月激情综合| 91爱操| 五月深爱网| 91九色精品熟女内射| 一区二区三区四区牛| 日日日日做夜夜夜夜无码 | 变态另类9| 婷婷丁香18| 高潮毛片遮挡费高一百度| 激情婷婷五月| 色五月色开心开心五月| 激情五月婷婷在线区| 人人操91| 人妻视频在线| 色色99| 色操综合| 九九热经典视频在线观看| 九九无码| 天天噜天天插| 狠狠色综合网| 日本三级中国三级99| 十月丁香九月婷婷综合| 亚洲综合色激情色五月| 丁香五月天啪啪激情综和网| 风流少妇A片一区二区蜜桃| 婷婷五月天激情网| 欧美精品99| 伊人九九综合| 婷婷成人五月天| 久久久九九视频精品18| 久久婷婷六月综合| 日本97在线观看| 色情五月天A片| 久草婷婷网| 丁香五月综合在线播放| 激情五月丁香五月色| 丁香婷婷激情五月色| 人人摸人人| 啪啪色激情五月天| 精品一二三区久久AAA片| 丁香五月色情| 五月综合色| 六月丁香视频网站| 无码AV免费精品一区二区三区| 这里只有视频精品| 一级黄在线| 狠狠狠狠狠操| 九九久久污| www婷婷| 大香av| 亚洲99综合| 婷婷五月激情网| 婷婷色综合| 五月亭亭激情综合| 伊人天堂婷婷| 五月天激情久久| 九九热在线观看6| 九九热九九| 天天操夜夜夜拍拍拍| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 99ER热精品视频| 亚洲中文乱字字幕线在永久| 奇米影视在线视频| 久久久久亚洲AV成人无码电影| 色人久久| 五月天久久色| 国产色色视频| 五月丁香亚洲校园欧美| 亚洲AV影片在线观看| 五月天综合影院| 超碰在线9| 97丁香花五月天激情小说| 91打屁股免费看| 亚洲va欧美va天堂v国产综合| 久久99久久99精品免观看粉嫩| 人妻久久久久久久| 人人人舔人人人操人人人摸人人人97| 六月丁香中文字幕| 国产午夜成人免费看片无遮挡| 天天插天天插天天插| 五月丁香六月婷婷久久肏| 五月成人网站| 丁香午夜天| 色播丁香| 六月丁香婷婷综合影院| 91超碰人人操| 丁香五月手机在线| 丁香五月婷婷姐| 久操人| 免费视频无码| 能看的av网站| 五月天色婷婷小说| 亚洲综合无码| 丁香五月亚洲综合| 天天日天天插| 99毛片| 色婷婷五月亚洲| 99re免费精品视频| 婷婷伊人綜合中文| 国色天香成人网| 啪啪操超碰| 婷婷成人小说综合| 五月婷婷深深爱爱| 九九re精品视频在线观看| 国产午夜精品一区二区三区四区| 综合色五月| 欧美激情-区二区三区| 亚洲色综合| 青青操日本摸摸看看| 99色婷婷| 婷婷色影院| 99精色| 五月丁香六月婷婷色| 久色网址| 国产激情在线| 亚洲成人综合网在线免费观看| 色情五月婷婷| 综合激情五月天| 五月婷婷六月天| 婷婷五月久久| 亚洲日韩26uuu| 久久综合丁香五月| 在线婷婷| 99欧州偷拍视频| 五月婷婷国产| 91碰九色| 久久九⑨| 日本专区久久| 色婷婷色| 婷婷性爱视频在线| 色婷大香蕉| 亲子乱AV-区二区三区| 中文成人在线| 日本精品人妻无码77777| 1024日韩| 婷婷五月天网| 女人高潮内射99精品| 91色婷婷综合久久中文字幕二区| 九九色热| 夜夜爽天天爽| 九月丁香| 超喷97免费在线视频| 婷婷五月影院| 亚洲精品一区无码A片| 激情五月天综合网| 国产精品久久久久久久久久免费| 婷婷色综合| 免费看欧美成人A片无码| 丁香婷婷久久 | 情色五月天网站| 成人五月丁香社区| se99高清无码| 精品福利911| 久热最新视频 | 久久91久久91色欲精品| 婷婷五月色图| 玖玖色综合| Se.婷婷五月天| 欧美色六月婷婷| www 五月天 com| 激情五月丁香综合网站| 丁香五月天亚洲视频| 久久婷婷五月综合啪| 久久久精品AV| 天天爽天天干| 婷婷无五月无码视频| 婷婷六月丁综合| 六月婷基地| 香蕉综合网| 情欲综合网| 久久久久久久久久人妻| 久色大| 婷婷操逼| 国内一级片| 久热久re| WWW.天天日| xfplayav在线| 婷婷色色丁香五月天| 天天狠天天叉| 丁香婷婷成年| 97热在线精品| 五月丁香婷婷国产精品综合| 久久婷婷五月免费视频| 能直接看的av网站| 97婷婷五月| 久草A片| 久久A热| 久久婷婷五月天| 亚洲色综合| 琪琪狠狠干| 久久丁香五月婷婷| 这里只有精品视频在线看| 综合网啪| 9色91视频| 91精品综合久久婷婷九色| 26uuu淫色| 五月婷婷六月天| 国产精品人人做人人爽人人添| 91精品丝袜久久久久久久久粉嫩| 69堂午夜视频最新地址| 九九激情| 欧美性生交xXxX久久久| 五月婷婷熟女| 五月天婷婷在线AN| 国产精品久久欧美久久一区| 97超碰在线免费观看| 天天综合天天做天天综合| 欧美日韩成人在线网| 97超碰婷婷五月天| 中文字幕永久在线| 六月色婷婷| 久久婷婷五月天大香蕉| 九九国产精视频| 中文在线成人| 久久ri精品视频| 五月丁香拍拍激情综合| 91精品久久久久| 色99视| 99re思思精品在线观看| 我爱大香蕉| 好看的国产精品| 天天摸天天做天天爱天天爽| A片试看120分钟做受图片| 九九色婷婷| 五月婷婷色五月| 综合久久十三| 五月丁香六月婷婷亚洲激情综合| 色99网| 久久激情五月婷婷| 99只有精品| 激情性爱婷婷| 这里只有精品免费观看网占| 色色欧美色色| 色婷五月天亚洲| 激情丁香五月天| 婷婷五月情| 激情丁香六月| 超碰在线9| 五月婷婷激情| 综合一区二区三区| 99爱视频| 六月大香蕉| 天天日天天操心| 日韩成人综合| 天天摸天天做天天爱天天爽| 婷婷九九色| 亚洲人成人五月天| 91/九色黑人| 九九热精品6| 亚洲色区17| 五月亚洲| 四月婷婷五月丁香| 婷婷综合一二三| 97色女人在线| 日韩999| 婷婷激情五月| 日本色婷婷| 六月婷婷狠狠| 影音先锋自拍网| 第一区久久网站| 色婷婷亚洲综合网站| 色婷婷AV久久久久久久| 麻豆精品| 婷婷五月天久久| aaaaa不卡| 天天拍天天操| 成人九九视频| 懂色av蜜臀av粉嫩av永陈冠希| 天天色粽合合合合合合合| 99在线公开视频| 国产67194| 再綫Av免费視品| 97操操网| 亚洲色五月婷婷| 久久五月天色婷婷| 国产成人亚洲综合A∨婷婷| 色婷婷丁香六月| 我淫我色婷婷五月天激情四射| 亚洲日韩欧美综合VA| 色婷婷影| 日狠狠| 欧美综合五月丁香五月天| 日本九九九九九九| 五月天婷婷在线AN| 五月丁香亚洲综合网| 新男人天堂人妻| 久久精典| 久久婷婷欧美| 4399在线观看免费高清黄色视频| 亚洲综合五月天| 激情五月婷在线精品| 成人毛片在线免费观看| 26uuu在线观看| 免费观看的AV| 男人天堂99| 久久人人做人人妻人人玩精品va| 79精品视频在线观看,| www久久99| 五月天sesese| 久久久激情视频| 激情亚洲色图片丁香综合| 97婷婷五月激情六月丁香伊人| 在线播放成人网站| 五月深爱激情网| 超碰91在线| 久久91久久精品久久| 色综合久久44| www久热com| 国产亚洲色婷婷久久99精品91| 伊人婷婷大香蕉在线| 色99日韩| 中文国产五月天| 丁香五月天啪啪| 国产一级黄色影片,| 久久久久9| 99在线精品免费视频| 思思热久久阴99| 久久久A级视频| 亚洲精品V天堂中文字幕| 精品99在线观看| 色五月激情综合| 色五月综合网| 五月婷婷久久久久| 久久婷婷一级片| 亚洲激情综合| 婷婷久久99| 五月丁香龟婷婷| 色亚洲视频| 婷婷射丁香| 婷婷久久在线| 色香蕉婷婷| 九九Av| 国产亚洲在线| 色色色在线观看| 五月天色婷婷网| 激情五月丁香在线观看直播| www.天天色综合| 强伦轩人妻一区二区电影| 热久免费视频9| 午夜无码熟熟妇丰满人妻 | 七月丁香五月婷婷在线| 亚洲精品视频在线播放| AV操逼网| 玖玖午夜视频| 性综合网| 婷婷九月丁香| 99精品福利视频| 五月天成人在线播放丁香| 热热久久精品视频| 天天激情综合| 99色视| 99色色爰| 66精品国产成人| 99久久综合网| 人妻熟妇国产精品| 日韩成人电影AV| 9191avse| 久激情网| 久久视网36| 99久久精彩视频。| 婷婷丁五月| 思思久久网| 婷婷丁香社区网| 亚洲va日| 凹凸探花电影| 色播五月丁香婷婷| 狠狠干狠狠干狠狠干狠狠干| 深爱五月天 开心网| 色婷婷深爱五月| 26uuu国产精品| 狠狠操天天日| 五月久久丁香| 色综合99| 婷婷五月激情欧美| 久久99综合| 高清无码视频网址| 激情五月天综合网| 激情都市另类| 九一九九黄色| 色五月欧美| 538任你爽| 婷婷 久综合| 五月综合777| 无码色色| 97影院一级片| 国内外色色色色色成人视频| 青青草免费公开视频| 色婷婷丁香花五月天| 日韩小视频在线99| 日本97在线视频| 久久久人妻人伦| 99秘 在线| 婷婷午夜天| 香蕉综合在线| 中字幕视频在线永久在线观看免费 | 九九色热| 五月丁香色色网| 99这里有精品视频| 超碰免费观看| 色婷婷久久综合久色综| 综合五月草| 六月婷婷国产| www.射伊蕉婷婷| 九九综合色| 激情超碰网| 涩五月婷婷| 99re这里有精品手机在线| 五月天 无码| 国产无套精品一区二区| 大香蕉综合视频在线| 丁香五月天激情四射网| 日韩欧美一区二区三区四区| 人人草人人爱手机视频看看| www.99精品在线| 狠狠精品干练久久久无码中文字幕 | 精品久久穴| 97欧美在线| 丁香婷婷偷拍| 99国产精品久久久久久久久久久| 色五月五月婷婷| 99精品丰满| 日本99热| 小视频久久久aaa| 亚洲综合色网| 在线伦子99热| 全国最新疫情| 色五月婷婷av| 99久热在线精品99re6热| 天天久久人人| 婷婷激情六月| 中文字幕无码AV| AV在线免费播放| 蜜桃五月天| 色综合色综合网| 婷婷五月天丁香社区| 五月丁香婷中文字幕| 色婷视频| 午夜日日| 五月综合婷婷久久在线| 五月天婷婷丁香| 色五月婷婷大香蕉| 五月天婷婷中文字幕在线播放| 婷婷六月综合激情| www.久久爱.c n| av人人操| 欧美丰满熟妇BBB久久久| 色99在线视频| 五月天啪啪啪| 丁香六月成人| 国产六月婷婷| 日本天天色| 91操在线视频| 99精品在线观看视频| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 色狠狠色| 丁香五月综合婷婷| 天天爱天天操| 另类图片五月天激情| 6080av| 色优久久| 亚洲综合字幕色色| 日本久久性| 97碰成超视频免费视频| 五月婷婷五月天亚洲无码| 专区无日本视频高清8| 中文字幕永久在线| 91在线日| 婷婷综合视频| 99操免费视频| 五月天婷婷AV| 色综合五月| 亚洲色图在线视频| 五月婷婷久| 中文字幕人妻一区二区| 99惹精品视频| 色五月综合激情网| www.人人操人人看人人想人人摸 人人人人操,COM | 中文激情网| 日韩在线视频中文字幕| 玖玖精品婷婷| 久婷久婷| 五月婷在线影院| 久久久性爱视频| 伊人婷婷大香蕉| 色综合丁香婷婷| 婷婷99中文字幕| 色综合丁香| 4399成人黄A片| 五月婷婷在线免费观看| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 婷婷丁香九月| 九九综合色| 九九精品网站| 婷婷中文字幕| 色婷婷激情视频| αV电影| 久久精彩视频| 六月99天天婷婷激情综合| 色色色99| 热久久77777| 久在线88综合| www.狠狠艹| 草草影院爱爱| 99超级碰免费视频| www色婷婷久久综合久色| 亚洲精品久久久久久久久久飞鱼| 噜噜噜精品欧美成人在线观看| 中文婷婷狠狠| 99免费视频| 天天做天天爱天天爽夜夜揉| 中字幕视频在线永久在线观看免费| 日韩按摩二区| 国产精品视频网| 武则天精品久久| 色必久悠悠影院| 激情综合五月丁香六月婷婷| 亚洲欧美婷婷五月色综合| 99日本精品视频热| 亚洲精品国产熟女久久久| 婷婷综合色五月天| 五月婷婷综合久久| 五月激情小说| 五月丁香另类图片| 99操视频| 五月Huangsewang| www.色婷婷| 人人操Av| 日韩成人综合| 色播五月天激情| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 狠狠插狠狠操| 亚洲色色色色| jiujiujiuwuyuetian| 九久9精品| 五月婷婷激情综合视频| 日韩成人中文字幕| 在线视频区| 久久婷婷综合网| 人人干AV| 色婷婷成人网| 超碰人人插| 99re8在这里只有精品| 欧美成人精品老美女噜噜噜| 大香蕉婷婷五月天| 色色色com| 丁香五月天堂| 色婷婷婷婷| 天天在线天天综合网色| 9精品视频在线| 五月丁香婷婷成人网| 啪啪婷婷五月天激情| 俺去也在线官网| 亚洲色碰| 亚洲av成人一区二区电影在线| 99热这里只有精品在线| 狠狠操狠狠操AV| 我爱宗和色| 99热最新网址| 色婷在线视频| 白人荫道BBWBBB大荫道| 99热这里只有精品1025| 久久人妻视步| 亚洲综合网激情小说| 婷婷色丁香五月| 日本三日本三级少妇三级66| 99国产精品白浆在线观看免费| 99在线热| 日日操夜夜爽| 亚洲激情精品| 男人综合网| 久久久久久久丁香五月天婷婷| 9久9久| 久久受www免费人成| 超碰在线91| 五月婷婷AV| 色五月天丁香婷婷| 这里只有精品1| 婷婷娱乐丁香综合网| 婷婷五月色花丁香社区| 九月丁香婷婷综合| 人人操女人| 欧美色偷偷大香| 国产毛片操B| 久久AAAA片一区二区| 人妻少妇色综合| 在线播放中文字幕| 97碰| 大香蕉久久婷婷| 婷婷五月激情中文字幕| 婷婷五月丁香手机在线视频| 婷婷日日天天| www.伊人天堂偷偷婷婷| 成人婷婷桔色| 久久色五月天| 色八月婷婷| 高清无码.com| 99这里是99在线视频| 97福利视频| 99黄色性生活| 五月婷婷黄色| 日韩成人网址| 色色五月婷婷| 国产乱码久久| 五月丁香久久网| 99热久只有精品首页| 九九99视频精品| 色五月在线| 99热这里只有精品69| 深爱激情五月天婷婷网| 亚洲精品色色色| 99热久草| 五月天婷婷在线播放| 无套内射极品大美女| 色色热| 97丁香婷婷| 可以直接看的av| 嫩草AV久久伊人妇女超级A| 久久精品99国产精品日本| 免费视频WWW在线观看网站| 国产黄色在线| 亚洲无码猫咪| 丁香密臀AV激情网| 激情性爱五月天| 激情五月图| 欧美色色色| 99热精品在这里| 色色五月天丁香婷婷| 天天日夜夜拍| 国产精品久久久久久久久久免费 | 丁香六月狠狠| 91啪级电影| 成人超碰Av| 色情五月综合婷婷| 99久久综合网| 国产亚洲精品AAAAAAA片 | 色色五月天激情| 激情综合五月天| 久操综合| 亚洲妇女熟BBW| 亚洲午夜国产成人电影VA国产欧…| 任我肏视频精品| 亚洲熟女色| 这里只有精9| 婷婷开心六月| 操操人人| 日本不卡高字幕在线2019| 五月丁香婷婷伊人日韩| 超级碰碰碰97免费| 丁香六月 婷婷六月| 99青青草| 日本三级黄色大片| 江苏少妇性BBB搡BBB爽爽爽| 九九99九九精品视频| 久久久99婷婷久久久久久| 99热国产这里只有| 熟女激情五月天| 99免费热视频在线| 9热成人在线视频| 久久久大香蕉| 很很干在线视频| 91无码高清| 久久精品99国产精品日本| 综合网狠狠| 蜜乳.comcom| 色五月丁香婷婷久草| 涩五月婷婷| 9久久久| 五月天色播网| 亚洲综合五月| 风流少妇A片一区二区蜜桃| 91婷婷五月丁香碰| 五月激情久久综合| 99热这里只有精品1025| 婷婷丁香九色| www.99热| 五月天婷婷7米| 天堂成人A片永久免费网站| 色五月婷婷操逼| 亚洲久热无码| 久久五月天婷婷| 国内一级精品| 国产精品成人av在线观看春天| 99热手机在线精品| 狠狠综合色网| 操日本人妻视频| 色五月婷婷影院| 秋霞丝袜啪啪啪| VA婷婷亚洲| 九九色精品| 久99久热| 狠狠操狠狠操AV| 我淫我色婷婷五月天激情四射| 天天爽夜夜爽夜夜爽精品| 国产精品国产| #NAME?| 操逼在线视频| 久热9| 五月丁香色色网| 天天做天天爱天天高潮| 沈娜娜av| 99re26视频| 国产亚洲精品久久久久久郑州| 日韩综合网络男女香蕉a片| 亚洲婷婷欧美婷婷| 久久婷婷网址| 色宗合久久五月婷婷| 香蕉久久国产AV一区二区| 激情婷婷色色| 婷婷久久精品| 成人短视频免费观看| av操一操| 亚洲人成播放网站| 欧美色欲色欲天天天www| 538在线精品| 激情综合综合综合| 99热色精品| 免费AV播放| 五月婷在线观看| 中文精品在| 久9免费视频| 97久久五月丁香婷婷| 这里只有精品在线视频在线观看| 日本色99网站| 久热只有这里精品| 性爱激情五月| 午夜电影网VA内射| 不卡在线视频| 欧美噜一噜| 亚洲超碰青涩| 婷婷五点亚洲| 中文字幕在线人妻| 天天草天天摸| 婷婷五月中文字幕| 色欲午夜无码久久久久久张津瑜| 青青日韩| 婷久久| 色婷婷五月天激情| 九九热精品|