欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
成人做爰黄A片免费看直播室男男| 久久这里只| 久碰视频| 激情丁香五月天| AA久久| 婷婷色导航| 色婷婷五月天激情在线播放| 久久久五月婷婷| 五月天丁香网| 欧美熟女99| www色婷婷久久综合久色| av操B网站| 激情图片婷婷丁香五月| 亚洲无码九九| 狠狠色激情在线| 亚洲视频在线网| 婷婷五月天久久久| 91人操人人人操人| 这里只有精品免费视频| 五月婷色丁香| 日本的α片xxxwww| 噜噜噜噜噜久| 97影院一级片| 日日爽夜夜爽| 久久精品亚洲热| 99免费综合网| 久久99婷婷| 久久综合五月情| 大香蕉网站,大香蕉综合| 久久久月丁香| 国产欧美婷婷五月| 久久人妻乱子伦| 六月色激情| 青青久久五月| 亚洲影院婷婷色| 色五月婷婷网| 97在线观视频免费观看| www.色婷婷| 99在线热| 九九热只有精品| 很很干夜夜干| 婷婷九月丁香| 久久92| 开心五月天激情网站| 婷婷久久欧美| 激情婷婷综合| 热99这里只有精品视频| 六月五月婷婷| 久热免费| 大香蕉婷婷久久| 婷婷五月天影院| 丁香婷婷久| 99激情| 99热精品在线| 久久五月综合| 婷婷综合中文| 中文字幕高清av| 淫视馆av三区| 五月婷婷婷| 色婷婷激情五月天| 色婷婷婷婷| 久久婷婷五月综合伊人| 五月天婷婷基地丁香| 日本在线视频www色| 五月天婷婷綜合院| 综合激情啪啪| 婷婷.com| 色综合久久久久| 五月天堂色| 欧美色色色色色色| 国产人妻人伦精品一区二区| 99超碰欧美| H亚洲| 国产av第一专区| 精品视频二级九九| 色色色综合色| 人人人人人人人人人草| 91岛国片| 天天天久久久| 婷婷久久亚洲| 欧美成人A片AAA片在线播放 | WWW,五月| 色一情一乱一乱一区91Av| 久久综合中文| 日本综合九九| 色碰碰视频| 97干在线| 激情综合亚洲色婷婷五月| 久草xx性爱视频| 欧美黄色AA片哗啦啦啦| 亚洲va综合va国产va中文| 婷婷视频网| 日逼影音先锋男人AV资源站| 9l视频自拍9l视频自拍九色学生| 色五月久久成人婷婷| 激情五月婷婷伊人| 亚洲婷婷丁香| 丁香五月欧美婷婷| www。狠狠干。com| 色欧美影院| 成人做爰A片免费看视频| 欧美黄色一级录像| 啪啪综合网| 婷婷亚洲激情在线观看视频| 天天肏在线观看| 久久天天| 综合一区二区三区| 91无码一起草| 色情丁香五月天| 狠狠操狠狠干综合| 日本操天堂| 日本天堂免费99| 婷婷色网| 超碰在线人人| 九月色婷婷综合| 丁香婷婷六月激情文学| 91丨九色丨丰满人妖| AV大香蕉| 丁香五月婷婷久久综合激情网| 五月丁香五月天现场视频| 婷婷五月激情六月| 九月婷婷综合色干| 色播五月丁香综合| 色色色色综合网| 午夜色丁香| 99热这里只有精品国产免费| 狠狠色婷婷777| 91九色 熟| 五月丁香激情啪啪| 大香蕉中文| 五月丁香综合色婷婷| 亚洲色色色色色色色色色| 久久久久视剧HD| 六月色婷婷色| 丁香六月婷婷综合| 99九九综合久久九九| 五月四色色| 99这里只有精品|v| 人妻性操逼中文字幕 国产| 色婷婷狠狠干芒果TV| 久久丁香五月| 五月天婷婷一起草| 狠狠色综合网| 婷婷色五月天第7色| 色狠狠999综合| 西西4r午夜剧场| 婷婷五月天av网| 久草大| 男人天堂 久久| 79色色免费| 色色色999| 91干视频| 色五月成人| 国产日韩av片| 这里只有精品2| 外国碰视频网站97| 直接看的av| 五月久久婷婷| 综合五月天| 日本色色色| 99 福利 导航| 色欲影香| 久久日婷婷| 伊人五月人妻精品| 午夜在线成人网站免费观看| 爱婷婷都市激情| 日韩xx在线| 丁香婷婷视频一区二区| ...婷婷五月综合不卡,国产在线手机| 亚洲婷婷欧美婷婷| 97碰免费视频在线| 超碰成人免费| 激情婷婷五月基地| 极品色丁香| 91在线日| 天天日日天天| 99国产欧美视频| 久久六月综合| 日本久久精品| 五月婷婷av在线| 99视频网| 婷婷九月| 国产女18毛片多18精品| 99热免费精品| 5月婷婷激情6月| a级毛片一区二区免费视频| 婷婷爱婷婷| 久久99免费视频网站| 97热这里只有精品| 婷婷激情小说网| 色必久悠悠影院| 亚洲亚洲人成综合网络| 五月婷婷片| 99久操| 26uuu| 中文字幕+乱码+中文字幕在线观看| 欧美性爱五月天| 能看的av片| 久久99免费视频| 亚洲熟妇无码乱子AV电影| 丁香婷婷久久| 综久久久| 色99色| 久久黄色片| 欧美乱码国产一级A片| 色综合久久久久| 色五月久久成人婷婷| 伊人免费视频9| 激情亭亭五月| 青草热视频这里只有精品| 天花AV无码| 色综合久| 影音先锋91资源站| 播五月丁香六月| 色爽九九| 99碰碰中文| 丁香五月在线观看| 激情婷婷五月| 婷婷五月天激情小说| 婷婷五月综合色中文字幕| wuyuedingxiang| 五月婷婷激情久久| 99热免费精品| 五月天四色房丁香| 日韩欧美一区二区三区四区| 激情五月,激情综合网| 伊人五月婷婷| 婷婷激情综合| 五月婷中文字幕| 草草色情综合网| www夜夜| 日日噜噜夜夜狠狠久久丁香五月| 色情五月停停丁香| 色综合日日| 只有精品在线观看| 国产精品成人在线| 99精品热视频| 六月色播| www.色色五月天.com| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 丁香五月性| 婷婷五月天资源| 国庆精品久久| 亭亭丁香aV| 色情五月| 六月丁香停| 丁香伊人五月色婷婷五十路| AⅤ在线播放网| 国产全是老熟女太爽了| 丁香五月影院| 风流少妇A片一区二区蜜桃| 五月婷婷激情久久| 天天爽综合网| 五月天色社区| 99热免费观看| 大香蕉520| 色婷婷888| 五月天色五月| 五月丁香花激情综合网| 人妻久久久久久久久久久| 天天婷婷操| 久久最新色色色| 色婷婷久久综合| 1024成人在线观看| 91久久久久久久久18| 色五月影视| 婷婷伊人久久综合| 思思热99热| 丁香涩涩爱| 深爱1激情网| 性生活久久人妻| 六月丁香婷婷在线波多| 五月天天爽| 成人丁香婷婷| 天天色官网| 丁香五月,激情五月,深爱五月| 五月婷综合性中心| 国产成人亚洲综合A∨婷婷| 久久99免费视频| 九九视频这里有精品| 中文字幕乱轮| 99精品国产热久久91色欲| 亚洲色婷婷| 久久婷婷内射| 婷婷五月天伊人| 亚洲乱码日产精品BD在线观看 | bbwcuckold精品熟妇| 五月色婷婷综合色| 欧美色爱五月天| 婷婷久久色| 亚洲网站999| 91一起操| 激情图片亚洲| 久艹大香蕉| 91五月天| 青青久久五月| 九九九九综合| 激情五月婷在线精品| 丁香五月激情啪啪| 中文字幕在线免费观看视频| 婷婷色综合中心站| 综合网色| jiqingliuyuetian| 亚洲综合五月天婷婷丁香| 熟女色色一区二区| 欧美日韩99| 激情网狠狠干| 九九九热精品| 一级韩国产精品毛| 久久国产性爱A V| 天天天摸夜夜夜玩| 99热在线精品观看| 婷婷黄色五月| 久热91| 思思热视频在线观看| 操91| 五月激情网络| 97狠狠色| av国产精品| 台湾佬天天日丁香婷婷五月天 | 婷婷伊人五月天| 激情婷婷六月天| 婷婷六月丁| 日日操天堂| 人伦30P| 青青草a在线| 开心激情站| 五月色丁香婷婷综合| 伊九九三级区| 色99色| 国产亚洲精品久久久久久郑州| 性爱五月婷| 色五月xxx| 激情六月色| 久久99国产综合精品免费| www.99精品视频| 五月丁香少妇A| 夜夜大香蕉婷婷丁香| 丁香五月婷婷欧美性爱| 伍月婷婷免费视频| 五月伊人网| 丁香六月婷婷激情| 大香蕉啪啪网| 99色在线观看| 久久婷婷激情| 婷婷涩涩五月天| 色99欧洲色19| 婷婷区日本| 九九RE视频在线精品| 亚洲黄色av网站| 开心五月婷婷在线视频免费观看| 中文字幕人妻熟女在线| 五月丁香手机在线| 玖玖婷婷五月天| 色爽九九| 天堂色婷婷| 激情五月天色色色| 婷婷激情视频欧美视频自拍视频欧美剧| 狠狠色五月激情| 色在线99| 亚洲啪啪啪啪| 99激情视频| 99自拍视频网站| 九九在线精点品| 麻豆忘忧草午夜| 成人欧美Va| 婷婷久久久| 激情五月婷婷综合| 久热这里只有精品6| 丁香六月久久| 99热精品在线在线| 五月婷婷六月爱| 99热只有| 五月丁六月婷| 婷婷 丁香 久久| 99视频精品在线| 无码一级片| 综合五月婷婷| 嫩模aV在线| 婷婷丁香宗合888| 国产激情av| 99久久久久久| 4399在线观看免费高清电视剧| 婷婷五月在线观看| 天天天摸夜夜夜玩| 国产日韩av片| 五月色网| 天天影视色综合网| 日亚二欧美| www99在线观看视频| 婷婷久久久久| 色99综合色88| 久久hd| 五月天色图| 婷婷久久综合| 热热久久99| 看全色黄大色大片| 在线日韩视频| 日日天天干| 丁香五月欧美成人| 丁香婷婷偷拍| 久久区区一二三av| 婷婷五月天堂| 五月六月激情| 亚洲综合色色| 久久您您综合网| 激情丁香五月天| 97精品欧美91久久久久久久| 99视频| 五月婷婷激情中心| 超碰99热在线观看| 激情综合五| 26uuuuuuuu国产| 免费亚洲成人电影AV| 色婷婷先锋| 亚洲婷婷五月草久| 97操碰视频| 欧洲MV日韩MV国产| 久久久www| 婷婷综合五月| 91色欲综合| 玖玖综合色| 俺也去综合| 亚洲狠狠婷婷| 能看的av| 免费亚洲婷婷中文字幕| 九九热精品6| 99re视频在线播放| 色丁香五月婷婷综合久久| 婷婷五月天精品| 激情深爱综合网| 激情五月天婷婷久久久久久久久久久| 好吊兆人妻| 天天天天天日| 久久久人妻| A片试看50分钟做受视频| 2025色婷婷| 激情五月天激情网| 色婷婷aV四虎| 无遮挡国产高潮视频免费观看| 婷婷久月| 99这里只有精彩视频| 另类天堂| 久久多色| 亚洲激情综| 91色综合网站在线| 久久艹 五月天| 99精品色| 色婷婷丁香五月| 夜夜谢天天干| 色婷婷视频在线| 99热日本| 九九热在这里只有精品| 久9热| 玖玖婷婷视频| 日韩大片艹艹| 91色色色视频| 五月丁香天堂| 天堂在线婷婷| 婷婷丁香黄色| 五月天堂六月丁香亚州中文字幕久久| 120分钟婬片免费看| 午夜九九九九九九九九九九九九九| 五月婷久久在线| 99这里只有精品国产| 国产精品大香蕉| 久久精品五月天| 五月丁香视频色色| 大战熟女丰满人妻AV| 99激情视频| 天天狠狠夜夜狠狠2023| 激情五月天小说网| 丁香九月激情| 91操人| 99热激情| 99色色| 色色国产| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 婷婷综合九月| 婷婷丁香五月天影院 | 天天爽,夜夜爽| 九九九九这里只有精品| 99无码| 99热精品在线观看| 九九热在线视频观看| 99精品热| 9九九久久精品无码专区| 99色综合久久| 99爽视频| 狠狠狠狠狠狠狠狠草| 五月丁香无码| 色色色婷婷五月天| 极品人妻VIDEOSSS人妻| 成人短视频免费观看| 永久免费一区二区三区| 亚洲天堂大香蕉| 天天噜日日噜综合无码| 这里只有精品,日韩视频| av网址在线| 久久er免费视频| 激情丰满熟妇五月| 五月婷婷丁香俺日污视频| 久久婷婷五月综合| 91色综合| 日本视频不卡123区| 丁香五月瑟瑟| 丁香五月欧美激情| 欧美噜一噜| 国产无套精品一区二区| 成人在线日韩| 五月香婷婷| wuyuedingxiang| 色五月婷婷综合在线| 精品视频这里只有精品| 婷婷五点亚洲| 一本色道久久综合狠狠躁小说| 大战熟女丰满人妻AV| 人操91在线| 7超碰自拍| 五月婷婷伊人网| 99视频在线| 99热超碰| 2017人人操| 再綫Av免费視品| 色色亚卅| 久久五月丁香| 日本三级色| 思思热久久阴99| 天天色综合图片| 色色色综合网| 欧美色色色| 99精品在线观看视频| 免费视频WWW在线观看网站| 五月丁香少妇| 人人爽欧美婷婷久久久五月丁香| 国产精品a无线| 网色99| 五月天综合在线观看视频| 深爱五月婷婷| 日本的α片xxxwww| 婷婷久久综合久| 亚洲第一av| 色久激情在线| 久久人妻超碰一区| 丁香六月天婷婷色| 婷婷六月天| 婷婷在线播放av| 96丁香六月婷婷蜜桃综合久久| 五月天操逼激情| 狠狠做五月婷婷| 五月丁香色| 九九综合九九| 91一起操| 综合激情五月丁香| 人妻啪啪啪| 九九色影院| 综合久久久| 97碰成超视频免费视频| 五月天桃色深爱网| 激情五月综合第一页| 五月色影院| 中文字幕综合色| 亚洲综合色棒| 2022久久婷婷| 六月份天丁香婷婷| 九热...av| 色色色婷婷五月天| 婷婷色婷婷| 狠狠色成人影片| 五月天色色激情综合| 色色婷| 四月婷婷五月色综合| 五月婷婷啪啪| 激情网狠狠干| 丁香五月综合网| 爱婷婷久久视频| 婷婷色网址| www.色五月.com| 99视频极品在线香蕉| 免费五月婷婷网| 人妻五月天激情开心网| 一区二区免费看| 色六月婷婷| 五月激情在线| 婷婷亚洲在线| 99精品97| 久久久人妻| 天天插轮理| 丁香婷婷久| 91九色欧美| 伊人久久婷婷| 婷婷色五月综合| 五月天狠狠| 婷婷色在线观看| 久久婷婷六月综合| 思思热国产在线| 五月丁香人妻| www色色com| 日本激情五月| 天天久综合网永久入口17v| 亚洲综合激情五月久久| 五月天色网站| 任你爽精品免费视频6| 丁香五月色| 一级二级香港秋霞欧美欧美秋霞| 丁香 久久| 五月天大香蕉| 欧美婷婷综合| 亚洲成色综合网站免费观看| 五月色亭丁香| 丁香五月香蕉| 能直接看的av网站| 亚洲成色综合网站免费观看| 91九色PORNY中文啦| 色综合激情| 色五月天在线| 深爱五月月天| 五月天大香蕉视频| 九九99久久| 色播播五月| 蜜桃婷婷五月| 伊人网碰碰| 婷婷五月花.97| 九色视频91疯狂| 五月婷婷伊人久久| 婷婷亚洲天堂| 日亚二欧美| 久久久国产精品黄毛片| 99九九精品| 99免费视频网| 激情丁香五月激情婷婷| 91九色网| 神马欧美精| 久操香蕉| 免费观看18视频网站| 欧美日韩成人免费在线| 五月天婷婷婷| 西瓜美女a片| 九九黄色网| 日都一级A片| 亚洲情综合五月天| 激情小说五月天| 五月狠狠| 99热这里只有精品1| 777精品成人a v久久| 一区二区三区视频| 91ncm视频| 亚洲美女裸体被操在线观看| 国产美女无遮挡裸体毛片A片| 五月婷婷色影院| 久草热视频在线观看| 婷婷五月天激情综合深爱| 婷婷香蕉| 九九婷婷综合| 97操碰视频| 婷婷色操| 香蕉久久国产av一区二区| 婷婷五月天涩涩| 综合AV网| 国产麻豆视频| 精品欧美性爱超级爽| 日本色婷婷| 99久久这里只有精品| 色狠狠综合| 91欧美日韩综合| 激情啪啪五月| 色综合综合色| 91碰碰| 夜夜操天天干| 午夜色婷婷| 婷婷五月婷婷| 操人无码| 国产AV一区二区三区日韩| 五月天婷婷综合| 99性爱| 风流少妇A片一区二区蜜桃| 97操碰| 成人午夜天| 成人中文网| 天天干天天日蜜臀av| 伊人在线另类| 激情亭亭五月| 97操视频| 久久在这里有精品| xxx综合在线| 激情五月婷婷在线| 婷婷久久色| 99精品在线观看视频| 色婷婷婷婷| 深爱五月婷婷| 91|疯狂丨高潮丨对白| www.金莲av| 色级婷婷| www.色99| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 五月婷婷六月丁香综合在线| 激情小说五月天| 久草x色在线观看99| 大香人妻| 久久五月天婷婷| 五月情四婷婷| 真实亲子乱子伦高清在线观看| 91热视频色网站| 五月天激情图片| 五月天久久婷| 久久久久久激情| 国产精品五月丁香| A久久| 色色色综合色| 91av无码| wuyuedingxiang99| 一区操| 爆乳熟女一区二区三区爆乳| 丁香六月婷婷一区| 久久精品只有这| 欧美黄色AA片哗啦啦啦| 亚洲精品第一国产综合亚AV| 999激情视频| 婷婷五月永远18免费久久久| 九九热精品视频在线观看| 色综合色色| AV在线不卡网站| 婷婷六月激情小说网| 欧洲第一久色| 日日日日日| 婷婷五月18永久免费网站| 久久五月天大美女| 激情综合激情综合| 国产成人精品一区二区三区视频 | 国产成人网址| 五月丁香六月情| 激情综合五月| 日韩不卡DvD| 狠狠干五月丁香综合网| 丁香成人五月天| 久久五月天丁香| 99热在这里只有免费精品| 无套内射极品大美女| 专区无日本视频高清8| 色情婷婷。| 日本熟女内射| 国产小精品| 婷婷在线免费| 男女免费视频999| 国内自拍1区| 久一这里有精品国产| 操操国产| 十区AV| 狠色色狠网| 四LLL少妇BBBB槡BBBB| 淫视馆aV二区一区| 久久精品99久久久久久| 色欲色香,www,com| 人人舔天天| 成人国产欧美大片一区| 99自拍视频在线| 丁香婷婷社区| 狠狠色九月| 丁香五月激情综合啪啪| 91色呦哟| 成人婷婷深爱综合网| 丁香五月在线播放| 亚洲综合在线视频| 激情av| 99久久久免费| 一区二区三区视频| 99这里有精品视频| 9久久久久久久久久久| 综合久久首页| 九九無妻| 国产免费av在线| 久久思思热| 69人妻人人澡人人爽久久| 五月激情综合美女久久| 99ri精品在线观看| 六月丁香婷婷五月| 天色色综合网| 丁香婷婷情色五月天| 色婷婷五月影视| 国产色色视频| 91网站黄| 99热9| 99久久婷婷国产综合精品草原| 成人av免费观看| 欧美婷婷综合| 天天日夜夜草进麻麻的子宫| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 99免费| 26uuu成人网| 伊人久久婷婷| 极品人妻VIDEOSSS人妻| 婷婷丁香熟女| 91伦| 另类图片五月天婷婷| 五月色婷| 亚洲字幕AV一区二区三区四区 | 色播五月丁香婷婷| 91婷婷五月天综合视频| 婷婷激情啪啪| 这里只有精品免费| 激情五月天啪啪| 久久草大香蕉| 国产做A爰片毛片A片美国| 9热网站| www.99色在线| 亚洲黄3级片网站欧美| 琪琪色五月天| 干亚洲天堂| 久久这里只有精品16| 五月色色激情网| 久热69| 六月丁丁香| 中文字幕网伦射乱中文| 欧美超碰亚洲| 狠狠色婷婷7777久| 色 五月俺去也| 欧美成人色婷婷| 91热在线| 亚洲网在线观看| 激情久久综合网| 天天玩夜夜操天天爽| 开心日韩丁香婷婷五月| 五月丁香激情综合久久| 小视频久久久aaa| 色综合久久之分久久| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 久久免费精彩视频| 另类图片五月激情| 天天艹天天综合网| 中文网av| 97久久草草超级碰碰碰| 任你躁XXXXX麻豆精品| 久久人操-久草婷婷-成人AV| 六月丁香婷婷视频综合在线观看| 狠狠狠狠操| 黄色片区子| 丁香狠狠干| 九色91视频| 伊人丁香婷婷东京| 婷婷伊人综合中文字幕| 亚洲精品无人区| 任你擦免费视频| 丁香五月第九色| 激情丁香九九五月综合网| 欧美大肥婆大肥BBBBB| caopeng97人人| 亚洲色五月天在线| 激情亚洲婷婷| 亚洲日本三级片| 色玖玖| 婷婷五月av| 天天操天天插| 人伦30P| 天天色综合综合| 色五月 五月婷婷| www.色情五月天.com| 亚洲色爽| 激情久久肏屄视频| 中文字幕91,综合| 六月欧美综合色情| 色九亚洲| 久久99精品久| 欧美婷婷五月激情| 亚洲AV成人片无码网站| 五月色丁香婷婷综合| peg 2区三区四区的| 91九色中文字幕女在线观看| 亚洲99精品九九在线| 欧美五月丁香啪啪响视频| 另类小说五月天| 婷婷色网址| 色播丁香五月婷婷操:屄| 丁香伊人网| 99久高清视频| 国产另类综合| 大战熟女丰满人妻AV| 色五月激情综合网| 91色吧网| 99精品偷拍视频| 99视频热| AV大片在线播放| 六月丁婷婷| 狠狠综合| 中文字幕永久免费| 久久婷婷五月综合激情国产| 伊人久久大香| 乱色色色| 五月婷婷 婷婷五月 一区二区 久久久| 色色色色热热| 丁香五月色| 丁香花五月天激情| 狼人婷婷综合| 伊人九九综合| 99色色网| 九九九九九九毛片| 五月天网站免费欧美| 五月天婷婷激情六月久久 | 色五月超碰| 激情网婷婷五月天| 任你日热视频| 人人摸人人澡人人| 国内久久久精品99| 99热这里只有精| 色色九区| 激情五月婷婷| 五月天久久网站| 免费观看大片视频 丁香婷婷 六月欧美| 丁香婷婷婷婷十二月在线观看视频| 五月综合六月婷婷| 亚洲日本三级片| 这里只有精彩亚洲视频推荐| 久久九九热re6这里有精品| 伊人丁香花综合影院| 一区二区三区四日本| 天天综合永久| www...com黄在线观看| 开心五月综合| 亚洲综合碰| AV人人操| 久久久99婷婷久久久久久| 日本色99| 天天爽在线视频| 99自拍视频在线| 深爱开心激情网| AV成人在线网站| 五月激情五月婷婷五月天在线| 丁香五月 性爱| 五月天色五月| 免费观看亚洲AV片| 九色婷婷| 国产片色| 亚洲激情五月| 级情九色| 五月婷婷开心色伊人| 97久久婷婷色| 99热这里只有精品4| 91婷婷色| 99久久久久| 婷婷五月天激情亚洲小说| 99视频热99| 六月激情久久| 97操在线视频| 99在线精品免费视频| 六月色国内综合| 久久日九九| 色五月首页| 六月婷婷狠狠色在线观看| 五月丁香色停停啪啪啪| 无码99| 亚洲精品网站色视频| 日韩黄色影院| 久久精品人妻| 色欲人妻综合aaaaaaaa网| 欧美成人AAA片一区国产精品| 永久AⅤ1| 色色丁香婷婷| 婷婷不干网| 色五月激情五月开心五月| 狠狠综合| 国产免费一区二区三州老师F1……| 免费视频99| 九九视频免费| 第四色色六月色综合| 亚洲在线操| 激情五月婷婷在线区| 东北黄色一级| 99成人| 五月情色天| 亚州精品色情无码A片| 婷婷五月天 丁香五月天 裸体| 五月婷婷亚洲色视频| 五月天五月色婷婷综合| 九九99视频精品| 九九热精品| 亭亭五月天成人| 伦乱天堂| 亚洲天堂色| 久色网| 婷婷五月视频| 18av天堂| 欧美日韩成人在线免费| 国产精产国品一二三在观看| www.五月天婷婷| 日本婷婷丁香五月| 成人网在线视频| 伊人高清无码| 99热精品在线播放| 色吧五月婷婷| 久久久久久久久久久久久久人妻视频| 欧美婷婷丁香五月| 性做久久久久久久免费看| 欧美影院| 婷婷丁香五月天狠狠| aⅤ79成人片| 冬月かえでAV无码播放| 亚洲欧洲中文日韩久久AV乱码| 激情人妻综合| 丁香六月无码| 99热 免费| av色婷婷| 99re免费视频| 变态 另类 在线| 久久久激情| 成人色五婷婷| 丁香五月激情澎湃一区| 五月丁香六月综合情在线观看 | 国产午夜伦鲁鲁| 五月天综合婷婷| 天天色天天日| 99热12| 色。 日日日| 99热在线观看免费中文| 超碰不卡在线| 操逼五月天| 色婷婷伊人激情在线观看| 天天操夜夜操| 91ncom.色| 久久久天天啊| 天天插天天插天天插天天插| 天天狠狠色噜噜| 色播五月婷婷综合| 日本三级黄色大片| 182TV亚洲| 99热第一页| 五月色情精品| 99热热热天天人人人超超碰| 女人高潮内射99精品| 91chinese在线| xx久久| 五月天久久综合婷婷| 激情小说婷婷五月| 97好吊操| 亚洲色vA| 婷婷五月综合在线视频| 丁香五月aV| 色色色综合视频| 欧美五月丁香啪啪响视频| 超碰在线91| av大香蕉| 久久五月天色婷婷| 欧美日韩一a.无| 日韩无码成人电影| 99久在线| 久久9视频| 色婷婷电影网| 婷婷激情五月综合| 婷婷放心五日爱| 99色色热热| 人妻自慰在线| 做爱夜夜干天天操| 午夜理论片最新午夜理论剧| 涩综合在线| 99热这里只有精品手机在线观看| 日本色噜| 欧美婷婷五月无砖| 精品九九视频在线观看| 丁香婷五月| 色五月丁香在线| 五月综合缴情网| 综合激情深爱| 色婷婷亚洲精品天天综| 婷五月天| 99九九热在线观看| 99色性爰网络| 色婷婷av在线观看| 日本精品人妻无码77777| 狠狠精品干练久久久无码中文字幕| Blackedraw视频一区二区| 婷婷色色综合| 五月丁香A∨在线| 五月丁香婷草| 99热九九这里只有精品| 欧美色色色色色色色色色色影视| 天天成人综合| 韩国久久少妇视屏| 99久在线精品99re8| 色五月超碰| 99精品网| 超碰在线网站9| 99热99日天天干| 91九色欧美| 91一起操| 国产又黄又爽又激情不遮挡视频在线观看| 天天碰天天插天天操| 激情丁香图片| www.五月天色色.com| 99久久网站| 亚洲黄网在线| 激情啪啪五月| 激情综合自拍五月婷婷色五月| 婷婷五月丁香五月天| 欧美日本va| 91性高潮久久久久久久久| 丁香五月天激情综合| 4399无码视频二区| 色色色在线观看| 色五月婷婷激情综合网| 色欲资源网| 久久婷婷丁香| 99在线免费观看| 亚洲婷婷综合视频| 成人在线精品| 五月婷婷无码专区| 99热热这里只精品996小说| 丁香婷婷激情| 在线不卡的视频| 99热啪啪| 久久久久久五月天| 亚洲精品电影| 五月伊人91| 亚洲精品影视| 色性日本| 成人av在线网站| 亚洲 在线 另类| 97九色视频| 五月综合在线婷婷图片| 99热| 成人做爰黄A片免费看直播室男男| 色婷婷影| 26uuu国产精品| 99热1| 激情综合网激情五月俺也去| 欧美在线看| 国产精品蜜臀99| 丁香激情网| www.99精品日操伊人乱碰在线| 99久久久免费| 婷婷.com| 97干在线| www.久久久久久| a v色婷婷| 成人在线网址| 情色五月天 网站| 蜜桃婷婷五月| 狠狠色噜噜狠狠| 淫五月停停| 久久精彩综合视频| 婷婷爱五月天| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 狠狠色激情综合| 操碰97| 丁香六月综合激| 丁香五月98| 六月激情婷婷| 久婷婷色| 日本 @ va 免费| 婷婷激情四射| 综合狠狠干| 人妻久久久久久久久久久| 另类少妇人与禽zOZZ0性伦| 97操碰视频| 五月激情综合美女久久| 亚洲亚洲人成综合网络| 久久99视频| 亚洲人人操| 九九久久偷拍| 婷婷五月综合在线视频| 亚洲男女激情| 一级精品999WWW| 舔色婷婷| 日操夜操天天操不卡| 国产精品五月丁香| 五月激情婷婷在线| 色吧婷婷| 婷婷丁香六月天| 中文字幕欧美精品久久| 五月婷婷影视| 国产亚洲精品AAAAAAA片| 国产亚洲99久久精品| 五月丁香自拍| 超碰色女人| 欧美黄色AA片哗啦啦啦| 97操资源婷婷| 久久 这里只有精品1| 五月丁香成人网| 激情图片亚洲| 色爱五月天| 人妻人人操| 97AV在线视频| 激情五婷网| 亚洲AV综合在线观看| 色哟哟性爱av| 人人色婷婷| 久久婷婷丁香视频网| 五月天激情国产综合婷婷| 欧美一级毛卡片无码| 天天爽夜夜爽| 超碰操日| 日日夜夜小色哥| 亚洲综合色婷婷文学| 亚洲综合婷婷| 激情五月丁香五月色| 五月婷在线色视频| 色青青电影色五月| 操你av| 六月婷欧美丁香综合| 婷婷情色激情| 日韩精品99久久| 99.N在线视频| 六月婷婷五月天| 色情五月天小说| 五月丁香啪啪啪| 狠狠操天天操综合| 日产精品一线二线三线芒果| 五月婷综合性中心| 亚洲狠狠丁香婷婷香蕉| 婷婷激情五月天在线| 五月婷婷在线视频| 91婷婷色| 97狠狠色| www.婷婷.com| 亚洲精品五十一区| 四虎国产精品永久在线国在线| 这里只精品| 中文字幕中文有码在线| 狠狠五月天激情| 日本理论久久| 97婷婷狠狠| 婷婷五月天堂网| 国产日韩精品SUV| 99热在线观看免费| 黄页免费一级视频懂色| 婷婷在线综合| 激情婷婷五月亚洲| 天天日天天久久青青| 丁香五月婷婷激情中文| 中文字幕成人影视| 丁香六月啪| 熟女五月天久久综合| 开心五月婷婷伊人| 久草大| 色女人久久| 丁香五月电影| WWW.99热| 性热视频99精品| 天天操天天干天天日| 啪啪啪五月天| 丁香激情五月少妇| 色五月在线观看| 久久精品小视频| 成人网页在线观看| 九九热只有精品| 国产熟女日日骚五月丁香爱| 99ri国产精品| 丁香五月天啪啪| 色婷婷中文| 99热精品中文字幕| 成人在线视频网| 亚洲色无码A片一区二区麻豆| 五月天最新网| 五月天婷婷色在线视频免费观看 | 日韩ac不卡无码| 99ree6| 色五月激情综合| 99在线免费视| 婷香狠狠爱五月| 婷婷五月天成人| 亚洲天堂aaa| 99在线观看视频免费| 亚洲99热| 97人人干| 97丁香五月| 婷婷色女| 一区二区三区XXXXXX| 成人做爰A片免费看视频| 五月婷婷五月天|