欧美成人午夜精品久久久,国产?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
返回資訊列表
狠狠高潮精品亚洲1| 岛国av电影网站| 激情深愛五月視頻| 色噜久| 亚洲永久免费| 日本va欧美va欧美va| 欧美婷婷色五月网| 国产美女无遮挡裸体毛片A片| 色玖玖综合网| 五月天综合图片| 操碰色一区就去操| 99爱在线精品视频免费观看| 日本天堂免费99| 99国产小视频免费观看| 欧美精品999| www.日日夜夜.com| 中文久久婷婷| 青青草轻轻操| 蜜臀99久久精品久久久久| 99在热线免费视频| 夜丁香五月婷婷| 一起草无码视频| 久9热视频在线| 色三级色三级| 九九性爱网| 成人色色视频| 五月婷久久在线| 国产av第一专区| 99色天堂| 日本色天堂| 激情婷婷五月基地| 另类色视频| 激情五月丁香色色去久久| 丁香五月性爱| 婷婷色网| 97在线视频观看| 色婷婷国产精品综合在线观看| 国产精品色情AAAAA片软件| 婷婷丁香综合| 热99AV网站| 亚色网站小视频| 大香蕉九操| 人人看人人97| 国产免费一区二区三区三州老师F1F1.CC | 色色色色热| 天天婷婷操| 五月婷久久| 日韩三及成人AV片| 婷婷五月天丁香社区| 夜夜操加勒比| 亚洲成人AV电影网| 婷婷五月色情| 五月丁香六月综合基地| 99热都是精品| 美女亚洲五月丁香| 日日射天天射| 夜夜夜夜夜操| 色吧五月婷婷| 五月天激情久久| 欧美va在线观看| 国产五月天欧美色| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 丁香五月婷婷av| 91av成人| 色婷婷天堂| 97碰碰碰| 97碰碰视频| 亚洲AV无码影院| www.日本91| 激情五月天色色网| 最近中文字幕2019视频1| 日本五月天网站| 丁香五月婷婷基地| 99热精品在线观看| 一本九九色| 狠狠色噜噜狠狠狠狠狠色综合久久| 99九九精品| 婷婷五月天丁香花| 丁香8月手机综合| W色综合| 校园春色亚洲色| 大香人妻| 久久九九怡红院| 免费99情趣网视频| 色五月婷婷五月天激情综合| 日韩av在线电影| 激情丁香社区| 丁香婷婷九月在线| 综合久久9| jiujiu热在线视频| 婷婷五月丁香成人| 日韩av在线电影| 五月激情视频| 欧在线一区| 都市激情亚洲| 五月天婷婷丁香视频| 色婷婷五月天天天天天天天天天| 久99热| 五月丁香六月色情网欧美| 色欲资源网| 激情图片久久| 欧美三级巜人妻互换| 97色色色色色| 欧美丰满熟妇BBB久久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久亚洲天堂| 天久综合91综合首页| 日韩在线9| 202丰满熟女妇大| 嫩模草| www.射伊蕉婷婷| 无码一区二区日韩| 久久综合影院 | 内射人妻视频国内| 五月婷婷AV| 操逼在线视频| 我爱大香蕉| 99热每日| 99热这里只有精品50| 激情九色| 五月色情| 五月丁香激情婷婷综合字幕| 国产激情综合五月久久| 99ri在线播放| 五月六月丁香激情| 婷婷五月天av小说| 婷婷久久网| 色情一区二区播放| 久热这里| 丁香六月av| 色色五月婷婷久久| 婷婷久久图片| 91婷婷五月天嫩女| 97男人天堂| 婷婷AV丁香| 五月丁香六月婷婷在线| 亚洲成人日韩无码精品| 丁香五月激情澎湃一区| 夜夜穞天天穞狠狠穞AV美女按摩| 怡红院AV亚洲一区二区三区H | 99热这里都是精品| 丁香五月AV| 婷婷深爱五月丁香网| 9久精品| 日韩精品99久久| 亚洲 小说 欧美 激情 另类| 午夜天堂一区人妻| 色六月天天激情综合网| 日韩另类| 激情色中文| 99爱视频| 久久与婷婷| 天天爽免费视频| 夫妇交换刺激做爰| 超碰激情网| 白天AV月月| va亚洲中文在线| 青青草青青草五月天| 日韩久久色| 99热这里只有精品8| 久久爱综合| 狠狠操天天操天天操| 日本九九九九| 人人色性网| 五月丁香激情婷婷综合| www.婷婷久久五月天| 久久这里只有精品视频26| 婷婷激情五月综合| 丁香五月婷婷综合网| 亚洲精品V天堂中文字幕| 婷婷5月天av| 激情综合亚洲| 天天操天天草天天草天天| 天天插天天日| 婷婷五月天激情视频| 欧美电影在线观看| 5月婷婷6月六月丁香| 综合久| 久久久com| 开心激情网五月天| 女力报到正好爱上你| 国产精品人成A片一区二区| 麻豆科斗777| 国产亚洲成AV人片在线观黄桃| 激情婷婷黄色五月| 色婷久久| 色综合网综合| www.久久爱.com| 久久这里只有精品网| 国产在线网| 91精品综合久久久久久五月丁香 | 天天久综合网永久入口18| 密乳视频| 九九久久高清| 国产99久久久国产精品免费看| WWW、日本色丁香、co m| 综合狠狠干| 免费日本aⅴ中文字幕| 俺去也婷婷| 婷婷五月丁香综合| 亚洲一二三网| 亚洲经典小视频| 六月激情久久| 亚洲综人色综网| 国产69久久久欧美黑人A片| 激情综合青草| 五月丁香888| 91精品综合久久久久久五月丁香| 婷婷五月激情热播| 中文字幕黄色电影网址| 国产小精品| 99热这里只有精品2| 2020日日干| 欧美日韩成人| 婷婷丁香九月| 婷婷五月天高清无码| 影音先锋四区| 综合日本婷婷| 久草婷婷网 | 热九九九九| 婷婷五月激情图片| 99人人操人人摸| 99热爱爱干干日| 久久艹 五月天| 九九热免费视频| 婷婷五月成年人| 综合精品啪啪| 亚洲成AV人片在线观看| 午夜天堂一区人妻| 五月丁香花激情综合网| 9191avse| 91chinese 在线| 日本精品久久久久中文字幕| 天天日日综合| 五月综合亚洲| 天天天天天操| av一区二区电影免费在线观看| www天天爽| 久热只有这里有精品| 日韩五月婷婷| 9 9 9色色| 这里有精品| 五月激情网站| 色狠狠999综合| 91久久婷婷人人澡草| 五月天狠狠网站| 99久超碰| A1片久久久| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 国产肥白大熟妇BBBB视频| 久久免费丁香| 亚洲中文AV| 五月婷婷五月天激情网| 亚洲激情五月婷婷日日| 五月色色色| 色色色色色九九九九九| 丁香五月婷婷色| 99热超碰在线| 久久九九怡红院| 久久久久久9| 91日综合欧美| 亚洲AV免费国产电影| 五月天丁香色色| 一本色道久久88综合日韩精品| 开心五月深爱五月婷| 大香蕉七区| 色在线免费观看| 五月丁香大香蕉| 欧美色片中文字幕久久久久| 99热精品免费| www.激情| 97在线碰| 欧美色九| 超碰99资源站| 99综合网| 日日骑夜夜撸| 99热伊人| 欧美久热| 五月天婷婷色在线视频免费观看| 操逼综合网| 天堂成人A片永久免费网站 | 北条麻妃伊人 | 狠狠色婷婷777| 婷婷综合五月| 69色婷婷| 久久色情| 五月婷婷AV| 99久久新视频| 久久精品99久久久久久| 99久在线精品99re5热视频| 婷婷综合天堂| 99亚洲精品综合在线| 99爱在线视频| http:色情日本com| 97人人干| 这里只精品热在线18| 激情五月五月婷婷| www.色99| 久久久久久久久久婷婷| 激情综合4月| 丁香六月激情蜜桃| 综合婷婷久久| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 超碰成人在线观看| 久久3p| 五月婷婷激情啪啪| 久久亚洲激情五码| 久久婷婷六月综合综合| #NAME?| 亚洲天堂有码| 欧洲电影在线观看免费版英语版 | 五月婷婷深深爱| 91一起艹| 精品操逼一区二区| 精品99在线看| 精品亚洲国产成AV人片传媒| www.com在线操视频免费观看| 琪琪色五月婷婷老师| 97久操视频| 五月开心婷婷网| 婷婷欧美激情综合| 这里只有精品1| 天天日夜夜拍| 九色激情网| 狠狠88综合久久久久噜噜噜| 熟女网站久久| 啪啪一区| 操碰99| 亚洲综人色综网| 夜夜综合色| 另类激情五月| 操人91| 五月做爱| 思思99re这里只有| 啪啪啪综合网| 337p大胆噜噜噜噜噜91Av| 成人AV网站在线| 色婷婷综合成人| 国产欧美日韩一区二区三区| 狠狠操狠狠操AV| 爱狠射| 婷婷国产日本欧美| 这里只有精品免费| 色综合久久99色| 五月丁香六月花| 天天狠狠色综合| 人人爱操| 婷婷九月丁香| 激情人妻综合| 久久九九精彩| 影音 五月 婷婷 久久| 无遮挡国产高潮视频免费观看| 久久九九经典| 99热无码| 操久久网| 婷婷中文字暮| 一级黄色尤物综合视频手机在线观看| 婷婷丁香在线| 熟女乱论网| 天天玩夜夜操| 狠狠艹狠狠艹| 991精品在线视频| 伊人大香久久| 天天噜| 九九热九九| 踪合专区啪啪| 超碰成人在线观看| 99碰碰| 国产视频婷婷| 亚洲婷婷五月| 久操无码| 五月婷婷深深爱爱| 久久国产一区二区三区| 五月婷婷免费在线观看| 99国产精品久久久久久久久久久| 色五月综合97| 丁香五月AV| 刘玥精品一区| 涩五月婷婷| 久草五月婷| 久久精品性爱| 大香av| 大香蕉五月婷婷| 色婷婷九月| 丁香久久| 九九视频在线观看视频6 | 色情五月天小说| 五月丁香成人网| 热99精品视频观看| 99热8在线| 日本五月婷| 色欲婷婷五月天丁香| 人妻VideOssS人妻高清| 久久婷婷综合国产| 日本九九九九| 丁香五月婷婷动漫| 九九色插| 综合激情婷婷| 天天色色婷婷| 婷婷色在线播放| 国产欧美婷婷五月| 碰碰碰97免费精彩视频| 婷婷开心五月| 狠狠色婷婷7777久综合| 天天干天天拍| 久人操| 99超在线| 97在线/亚洲| 国产成人精品亚洲线观看| 亚洲区视频| 97超碰,人人舔,人人操,人人摸 | 玖玖婷婷免费| 欧美色99| 日韩草草草草草草草草草草草草| 天堂中文国产| 久久五月网| www,999日本色| 色在线视频网2025| 91亚洲免费片| 日韩人妻在线观看| 久久九九大香蕉电院| 色婷婷丁香五月天在线观看| 久久最新色色色| 亚洲无码成人| 99青青草| 五月丁香啪啪激情| www,久久久人人| 99热这里是精品| 综合一本道| 被男人添B超爽视频| 99亚州综合精品成人网| oVV4WIB3vFi8D| 久久天堂婷婷五月| 色色色免费视频| 97丁香五月| 九九视频精品在线免费| 五月婷婷中字在线| 97超碰综合| 五月婷婷黄色毛片| 色婷小说| 91九九九九九九| 无码AV免费精品一区二区三区| 日日夜夜天天爽| 免费亚洲成人电影AV| 字幕网AV中文字幕| 九九色色| 狼人久草| 久久九九爽| 亚洲综合另类| 狠狠色丁香| 激情久久综合网| 激情婷婷丁香色情五月天| 蜜臀AV在线成人| 久久色五月| 日本久久9| 久久激情四射| 色婷婷四虎| 丁香五月天AV在线 | 99热综合| 九九色逼| 亚洲爆乳无码精品AAA片蜜桃| 婷婷性色| 97丁香五月| 日本在线99| 超碰人人99| 婷婷丁香五月婷婷| 色五月色五天色情网| 五月天婷婷激情| 开心婷婷中文字幕| 久色网址| 国产成人网站在线观看| 开心五月婷婷| 91黄色五月天视频| 丁香婷婷五月综合| 激情五月天色网站| 天天日日人| 亚洲成色综合网站免费观看| 欧美丁香六月激情视频| 99精品视频免费在线播放| 天天天久久久| 欧美性爱5月天天天看| av九九| 亚洲精品网站色视频| 秋霞AV美国| 五月婷色色| 18av天堂| 精品久久66| 久久色五月天| 丁香五月婷婷五月| 国产精品 的国产| AV在线免费播放| www91在线| 欧美婷婷六月丁香综合色| 日韩 中文 欧美| 97碰碰视频| 五月婷婷激情刺激| 五月丁香狠狠| 99操逼视频| 久热91| 99久久超级| 影音先锋自拍网| 99热在线网站| 五月综合激情久久| 丁香桃色网| 婷婷激情四射| 葵花AV在线| 99久久久免费| 五月丁香六月香综合激情| 欧美性爱一区| 激情五月黄色| 久久99综合| 99精品久久久久久久婷婷久久| 激情婷婷综合| 曰曰久久| 97偷拍对白视频| 成人片在线播放| 丁香网五月网| 婷婷五月天久久久| 伊人久久大香| 麻豆123区| http://www.sd-xiangsu.com/| 婷婷五月天在线一区| 无码操B| 五月天婷婷丁香人人操91| 久久青青日本视频| 五月在在观看| 色五月综合在线| 97操在线资源| 日韩综合大黄| 99久久综合网| 在线中文av| 色J香五月天| 99欧美| 大香蕉啪啪| 丁香桃色网| 99视频| 永久的网站AAAA | 色综合五月在线| 丁香六月啪啪啪| 五月丁香狠狠爱婷婷综合| 五月婷婷综合性爱噜噜| 久热精品视频| 亚洲六月色| 97色色-99久久| 激情综合九月| 色婷婷综合综合网| 99这里只有精品| WWW久久99久久99久久| 激情综合网五月天天| 色综合久久888| 色九月欧美| 五月婷婷亚洲综合网| 99精品在线播放| 亚洲啪啪网| 成人精品亚洲性爱| www.五月婷| 99热无码| 人人操91色| 婷婷六月伊人| 97操碰人免费| 99九九精品视频| 欧美色男人网站| www婷婷色情网| 丁香五月激情啪啪| 99热99热在线观看| 玖玖色综合网| 人妻熟妇国产精品| 五月天色色网站| 操逼视频一区| 久久综合中文| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 天天操B| 五月丁香久久网| 无码髙清| 99热99色| 六月婷婷五月丁香| 久久婷婷五月综合色播| 久久探花91swag| 五月天综合影院| www.九九婷婷| 五月天婷婷爱| 丁香色情五月综合激情| 搡BBBB搡BBB搡18| 天天爽天天爽夜夜爽| 五婷婷综合网| 婷婷六月亚洲综合| 91人妻PORNY九色大屁股| 九九热在线99| 亚洲激情五月丁香久久久久| 国产色香蕉精品五夜婷| 亚洲愉拍99热成人精品| 久久五月丁香伊人青草| 色综合色香蕉网| 精品久久久人妻| 9l视频自拍9l九色9l成人| 色狠狠色狠狠| 99精品国产在热久久婷婷| 香蕉婷婷| 婷婷丁香激情| 色九亚洲| yazhoujiqingav| 婷婷性色| 天天综合色丁香| 亞洲自怕| 久久99网| 五月婷婷丁香网| 欧美日朝成人| 婷婷99狠| 一起草av| 欧美成人性爱网| 激情五月天久久丁香| 日本激情综合| 人妻熟妇国产精品| 就爱射中文字幕资源网| 人人操婷婷| 丁香婷婷五月天激情四射| 天天噜天天爱| 五月丁香激情怕怕| 嫩草免费视频| 人人爱摸视频| 五月丁香婷婷中文网| 一区二区乱码视频| 日比视频91| 久久丁香五月天| 国产精品久久久丁香五月八戒视频| 狠狠婷婷色| 97碰碰人人| 久久这里有精品在线观看| 伊人婷婷大香蕉| 色六月 婷婷| 亚洲视频99| 微拍92| 97色色视频| 狠狠五月天| 日日婷婷不卡| 丁香婷婷激情综合五月激情| 日韩成人无码| 99热这里是精品| 欧洲激情精品婷婷| 亚洲瑟瑟精品在线| 亚洲va日| 丁香六月色| 超碰国产在线播放| 欧美99| 亚洲精品国产成人AV在线| 丁香五月婷婷色播艳门照| 激情99热| 天天日,天天射,天天插| 久久性爱视频| 91综合色| 伊人碰碰婷婷| 大香蕉九九操| 成人一区在线观看| 色婷婷人人| 黄色国久久| 色婷久久| 99热啪啪| 五月香婷婷| 五月婷婷婷婷| 夜夜骑夜夜撸| 99热久| 婷婷五月天成人网| 五月婷婷丁香在线| 精品久久久人妻| 丁香五月综合| 婷婷五月丁香香蕉| 婷婷色五月激情| 色吧综合网| 99久久九九| 91丨九色丨国产打屁股| www.zbzhongsen.com| 91超级碰在线视频| 日本色色图| 欧洲不卡视频| 99热手机在线精品| 色五月综合| 综合色99| 四川女人毛多水多A片| 久久婷五月综合| 五月婷婷影| www.91.com黄| 五月激情在线| 一本大道熟女人妻中文字幕在线 | 99思思热只有在这里看| 天天做天天爱天天要| 日日夜夜婷婷| 亭亭色网| 丁香五月天视频| 欧美美女国产日韩一区二区久| 久久性刺激| 伊人久久婷婷| 天天粽合合合合| 五月6香色婷婷视频| 色婷婷六月激情| 国产日日操夜夜操的肉棒视频| 天天拍夜夜撸 | 婷婷五月天深爱| 色婷婷综合网站| 婷婷五月天成人网| 久久天天| 亚洲精级| 超碰免费成人| 色五月天网| 婷婷五月六| www五月天com| 久久六月综合| 九九热9| 久久与婷婷| 久久精品婷婷| 婷婷五月天亚洲图片| 丁香五月婷婷亚洲另类| 五月开心网| 色婷婷九月| 色天使久久综合| 美女网黄| 久久九九大香蕉电院| 午夜婷婷久久 | 丁香五月欧美色综合| 婷婷久草| 亚洲色基地| 欧美激情xxxXX| 五月天欧美 另类小说| 激情五月天社区| www.yw尤物| 五月丁香综合影院| 伊人日日干| 爽极品色| 九九激情| www.夜夜夜| 外国碰视频网站97| 久久探花91swag| 色五月天影视| www.婷婷六月天| 大香蕉久久青青| 亚洲九区| 五月丁香六月婷婷色情| 26uuu亚洲色| 91人人操人人爱| 五月天婷婷丁香成人网| 久久精品爱爱| 丁香色成人| 99视频免费播放 | 亚洲小电影在线观看黄999| 六月天无码网址| 伊人久久艹| 日韩无码91| 天天色综合网吨吧| 欧美顶级少妇做爰HD| 婷婷丁香激情综合色情| 亚洲五月天伊人| 婷婷淫淫狠狠六月| 国产无套精品一区二区| 六月99天天婷婷激情综合| 亚洲色五月天| 丁香五月玖玖| 精品综合五月| 亚洲最大成人综合网720P| 色婷婷99| 99热婷婷| 殴美日比视频| 五月丁香啪综合| 亚洲爱婷婷| 79色色色色| 97色射| 俺去也在线官网| 亚洲色五月| 五月六月婷婷激情网| 久久网日本| 五月婷婷色播| 久久人人九| 五月色婷婷AV| 婷婷五月婷婷| 色婷婷综合在线| 婷婷色基地| 狠狠婷婷日韩| 五月丁香婷爱在线| 丁香婷婷五月天成人| 五月综合激情综合久| 无码激情AAAAA片-区区| 99精彩视频在线观看| 少妇被下春药玩弄A片| 九九热再线九九视频免费在线观看| 天天搞天天爽| 无码髙清| 99热最新| 婷婷五月蜜桃成人桃色丁香| 台湾无码A片一区二区| 91人操人人人操人| 中文字幕AV在线播放| 51XX午夜影福利| 丁香五月成人社区| 99在线视频精品| 99久在线精品99re8热| 色五月首页| 五月天丁香网| 伊人狠狠综合| 丁香九色不卡aaa| 99爱视频| 女性自慰系列第五页| 久久激情五月| 精品少妇蜜臀91| 五月天大香蕉视频| 超碰色综合| 99re视频在线| 久久婷婷激情| 亚洲激情99| 丁香婷婷五月综合欧美另类| 久久 这里只有精品1| 婷婷六月成人| 激情五月天综合网| 丁香五月 综合| www.一区二区三区| 强伦轩人妻一区二区电影| 深爱五月月天| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 婷婷丁香五月六月激情| 久久日本wwww色| 91超碰在线观看| 2025最新亚洲激情在线| 国产中文字幕在线视频免费观看| 色婷婷五月天不卡| 超碰在线资源| 五月天婷婷在线AN| 99热啪啪| 色情网综合| 天天操无码| 开心综合激情综合| 久久婷婷国产| 99riav 亚洲| www.jiujiujiu| 亚洲九九九九| 丁香五月欧美色综合| 丁香六月婷婷久久综合| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 99久热| 日夜夜久久| 99re在线观看| 秋霞网在线免费基地五月婷婷丁香| 九九精品网| 久久色在线视频| 91人人看| 欧美性生交XXXXX无码小说| 亚洲婷婷欧美婷婷| 亚洲五月天天| 大香蕉五月婷婷| 丁香色婷婷五月天| 激情欧美丁香五月| 欧美天天干五月丁香| 91精品人妻少妇无码影院| 国产又爽又猛又粗的视频A片| 激情五月婷婷色播网| 婷婷五月天AV| 伊人综合色干| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 99啪视频在线观看| 欧美大香蕉视频| 九九热只有精品6| 婷婷午夜综合| 狠狠色综合无线观看| 国产99久久久国产精品免费看| 亚洲色综合性| 婷婷五月俺要去| 免费超碰在线| 亚洲99热| 亚洲亚洲人成综合网络| 九九久久综合| 人妻九九九九| 激情 婷婷| 色综合色综合色综合色综合| 五月天激情.com| 五月熟妇婷婷久久| 5月婷婷综合| 激情五月天婷婷图| 久久资源网五月婷| 色五月婷婷1| 国内在线99视频| 伊综合蕉| 丁香操逼| 色五月激情网| 操骚货在线| 亚洲色视频| 婷婷王月天影院| 天天天摸夜夜夜玩| 久久婷婷五月天| 噜噜噜狠狠色综| 五月停停色色丁香| 亚洲成人高清在线| 日本一级| 日韩成人av在线| 丁香九月婷| 激情性爱五月天| 九九99免费视频| 久久综合综合久久| 中文字幕AV在线播放| 九九综合伊人| 91丨九色丨大屁股| 99久久婷婷国产综合精品青桔| 天天综合网色欲香| 丁香狠狠操| 五月丁香成年黄色| 91久久五月天| 亚洲网视屏| 丁香六月婷婷久久综合八月| 五月天婷基地| 深爱激情四射| 婷婷伊人久久综合| 99热6这里只有精品| 色播五月| 国产综合色婷婷精品久久| 色婷| 99热精品在线在线| 又大又粗九一在线| 狠狠色狠狠色综合日日91| 丁香五月天婷婷91| 97香蕉碰碰人妻国产欧美| 操碰97| 久婷婷五月激情| 丁香五月激情视频在线| 婷婷五月色網站| 日韩在线一级| 天天综合精品| 激情综合网激情五月丁香五月俺也去| 99久热| 婷婷五月综合基地| 久久99大全| 婷婷五月激情热播| 婷婷激情丁五月| 激情五月影院| 天天狠天天叉| 久久丁香五月| 婷久久高清| www.91在线观看| 日日日,com| 婷婷五月天天aV| 成人五月天丁香婷| 少妇AB又爽又紧无码网站| 久久99网站| 五月婷婷精品视频| 成人电影一区| 五月综合影院| 另类A片| 91 影音先锋| 国产精品视频免费看| 91黄址| 五月婷婷久久网| 秋霞AV淫| 97干干干丁香| 热久久这里只有三级视频| 超碰chaompinm| 五月丁香狠狠地噜噜噜噜| 免费97碰碰| 国产精品第一国产精品| 久久国产高清| 婷婷在线午夜| 97人凄人人操人人爽| 三级毛片视频| av在线观看免费| 婷婷射婷婷舔| 欧美色色色| 婷婷丁香五月色偷偷| 五月丁香六月婷婷免费| 丁香五月激情无码视频| 九九99久久| 日韩伊人大香蕉| 色婷五月天亚洲| 久久久99视频| 9色免费网| 午夜 外网 精品 在线| 欧美爆乳一区二区三区| 久热9| 另类国产欧美视频| 色五月婷婷在线视频| 久久五月网| 9999综合99综合人| 丁香婷婷五月六月天| 91丨九色丨43老版熟女| 99热99草97| 激情五月婷在线精品| 9久久精品| 色婷婷导航| 狠狠色五月| 国产综合A片| 五月天婷婷乱| 欧美槡BBBB槡BBB少妇| 久久婷婷亚洲| 婷婷色在线视频| 丁香婷婷老司机久操| 天天干-天天日| 国产激情久久| 色婷婷六月性| 五月综合无码| 香蕉久久国产AV一区二区| 狠狠色丁香婷婷久久综合| 男人的天堂99| A久网| 97干在线视频精品店| 天天婷婷操| 国产精品久久久久久久久久| 成人五月天综合网| 色9999日韩国产| 伊人久久婷| 五月丁香久| 久操干| 久久婷婷五月天激情四射| 色婷综合| 婷婷五月激情视频在线| 色五月首页| WWW五月婷婷| 丁香成人五月天| 少妇丁香婷婷 | 大香蕉久久综合网| 99在线视频精品| 中文字幕日本最新乱码视频| 五月激情久久综合| 人人爽网| 五月婷婷精品无在线| 91碰免费视频| 日韩视频99| 国产欧美日韩综合精品一区二区| 色五月婷婷av| 激情婷婷五月| 激情婷婷五六月天| 国产,欧美,学生妹,视频| 丁香五月激情澎湃一区| 婷婷五月天基地| 欧美丁香六月激情视频| 婷婷丁香综合网| 五月婷婷啪啪啪啪| 久久99看免费| 99亚洲天堂| 久久一热免费视频| 三级毛片视频| 五月天天天色| 色综合网页| 五月激情天| 色五月综合| 天天射影院| 婷婷五月天啪啪| AV成人在线播放| 日本一级黄色电影| 99这里只有免费的小视频在线观看| 五月天综合婷婷| 桔色成人官方网站| 久热爱大香蕉在线蜜臀悦色| 另类精品视频在线观看| 色五月丁香五月激情五月激情| 丁香六月在线| 另类天堂| 丁香婷婷狠狠97| 五月天激情视频| 久久的爱大香蕉| 激情亚洲网| 玖玖九九99| 丁香五月综合激情性爱| 超碰在线国产| 久久久精品色色色| 欧美色偷偷大香| 色吧五月婷婷| 五月婷婷丁香色吧网| 久色激情| 亚洲精品一区中文字幕乱码| 另类激情中文| bbwcuckold精品熟妇| 日韩欧美性爱| 国产精品色| 国产婷婷五月色情综合| 热99这里只是精品| 超碰自拍天堂| 思思热视频在线| 第四色婷婷丁香五月| 丁香色五月直播| 激情五月天福利| 色婷婷基地| 丁香五月激情网| 国产26uuu视频| 激情av在线| 久久这里有精品| 六月综合在线| 思思久久精品视频| 国产精品色婷婷久久久精品| 亚洲日韩乱码一区二区三区四区| 美国天天日天天操| 激情久久久| 人妻中文字幕精品| 成人做爰高潮A片免费视频| 97碰碰在线观看视频| 久久网思思| 色综合狠狠色| 久cao香蕉影院| 五月丁香六月| www.av骚货| 激情综合网五月| 中文字幕人妻AV| 97高清国语自产拍| 99re思思久久| 99九九视频| 色亚洲中文| 久久99婷婷| 久热伊人9| 99热伊人综合| 成人.在线日韩| 超碰在线人妻| 97干在线| 日韩另类在线观看| 亚洲激情婷婷| 色情五月丁香婷婷网| 99福利导航| 激情婷婷综合网| 伊大人久久| 国产在线aaa片一区二区99| 99热这里只有精品66| 干一干xxxx| 天天日综合| 五月婷婷丁香社区| 99r这里| 五月天色色激情综合| 六月婷欧美| 日亚二欧美| 中日韩狠狠色| 综合激情sV| 久婷自拍视频| 婷婷五月a| 色综合色综合色综合| 婷婷狠狠青青| 丁香五月激情综合久久| 婷婷五月激情基地| 色逼综合网| 久久综合五月天激情小说网站| 久久久com| 1024日韩| 夜夜骑夜夜操| 啊v视频在线观看| 人人摸人人干| 97天堂| 俺去也五月| 99久久户外勾搭| 五月天天丁香婷婷| 69色色视频| 激情久久综合网| 中文字幕色色色| 亚洲天码视频www蛋播视频| 久久久五月四色| 日本社区五月天激情| 五月天啪啪啪| 另类激情五月| 丁香五月六月激情久久| 五月婷婷六月丁香激情| 操骚货在线| 色婷婷久久综合丁香五月| 婷婷五月天激情诱惑| 久久精彩视频| 久99视频| 五月天精品| 大香蕉 婷婷| 色色丁香五月天社区| 91精品国产日韩91久久久久久国模| 丁香九色不卡aaa| 99热这里有精品首页10| 六月婷婷色综合| 五月丁香啪啪激情| 怡红院99| 人人看人人草人人摸| 综合一本道| 九九九色综合| 婷婷九月| 色在线免费观看| 20253AV| 91成人看片| 六月激情婷婷色| 激情五月综合视频| 精品无码99| 九九热中文| Av大香蕉| 人人爽网| 国产午夜精品一区二区| 久思思热视频在线观看| 五月天婷爱综合| 久久视频婷婷| 欧美交换配乱吟粗大25P| 思思热在线观看| 97婷婷五月| 玖玖综合色| 婷婷综合激情五月综合| 天天干天天干天天干| 久色网| 色原狠狠综合| 婷婷第六色| 日韩1区2区| 激情小说五月天| 激情丁香五月天图片| 亭亭丁香aV| 人妻内射视频| 色色亚洲| 国产婷婷综合在线免费视频| 亚洲色欲欧美一区二区三区| 婷婷五月天AV| 极品少妇高潮啪啪AV无码| 九月激情婷婷丁香| 国产成人AV在线| 色婷婷狠狠久久综合五月| 99操久久| 激情综合文学| 99这里有精品视频3| 开心深爱激情网| 婷婷五月天伊人| 婷婷激情人妻| 亚洲综合婷婷六月丁香五月| 五月天色婷婷综合| 色135综合网| 亚洲成人无码免费| 天天激情夜夜干| 色婷婷色综合激情91| www热久久yy9| 丁香五月欧美婷婷综合| 碰碰91| 色丁香五月婷婷在线| 五月天成人免费视频| 婷婷丁香成人五月天| 色人久久| 激情开心五月天| 激情综合视频| 激情综合5月| 婷婷五月天久久| 99小视频在线观看| 99re这里有精品手机在线| 婷婷中文字幕| 国产无人区大片| 欧州色色| 97人人草| 一月婷婷色色| 日本操B视频| 熟女强人妻一区二区三区四区无| 婷婷欧美激情| www.精品99| 五月丁香六月婷婷网| 中文字幕,综合,91| yazhouzonghesese| www激情| 六月婷婷天天操夜夜爽视频| 欧美在线97| 五月丁香婷婷婷激情爱爱| 日日干综合| 五月婷婷丁香| 色婷婷丁香网| 99久久激情视频| 久9久9热久热| 最新av在线观看| 超碰猛烈的性猛交| 丁香六月婷婷色播| 五月丁香婷婷啪啪综合| 五月婷婷之综合激情| 丁香五月综合激情久久潮喷| 日本熟女内射| 热99视频精品在线| 日日操,夜夜撸| 99精品综合| 日夜夜久久| 亚洲激情六月| 深爱激情婷| 亚洲成Av人片乱码色第1集| 五月天六月婷婷| 91 九色 入口| 五月婷婷综合视频| 日韩色久| 五月丁香免费看| 久久黄色免费视频|