from typing import Optional

typing 是python3.5中开始新增的专用于类型注解(type hints)的模块,为python程序提供静态类型检查

Union

Union,联合类型,Union[X, Y] 代表要么是 X 类型,要么是 Y 类型。 联合类型的联合类型等价于展平后的类型:

Union[Union[int, str], float] == Union[int, str, float]

仅有一个参数的联合类型会坍缩成参数自身,比如:

Union[int] == int

多余的参数会被跳过,比如:

Union[int, str, int] == Union[int, str]

在比较联合类型的时候,参数顺序会被忽略,比如:

Union[int, str] == Union[str, int]

这个在一些方法参数声明的时候比较有用,比如一个方法,要么传一个字符串表示的方法名,要么直接把方法传过来:

def process(fn: Union[str, Callable]):
    if isinstance(fn, str):
        # str2fn and process
        pass
    elif isinstance(fn, Callable):
        fn()

Optional

Optional,可选类型, Optional[X] 等价于 X | None (或 Union[X, None] )。 意思是说这个参数可以为空或已经声明的类型。

但值得注意的是,这个并不等价于可选参数,当它作为参数类型注解的时候,不代表这个参数可以不传递了,而是说这个参数可以传为 None。

如当一个方法执行结果,如果执行完毕就不返回错误信息, 如果发生问题就返回错误信息,则可以这么声明:

def judge(result: bool) -> Optional[str]:
    if result: return 'Error Occurred'

例子

#Optional
from typing import Optional

def foo_v2(a: int, b: Optional[int] = None):
    if b:
        print(a + b)
    else:
        print("parameter b is a NoneType!")

#只传入a位置的实参
foo_v2(2)

# 输出
>>> parameter b is a NoneType!

ModuleNotFoundError Traceback (most recent call last) Cell In[1], line 10 8 from tensorflow.keras.preprocessing.image import load_img 9 from importlib import reload ---> 10 import segmenteverygrain as seg 11 from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor 12 from tqdm import trange File ~\segmenteverygrain-main\segmenteverygrain\segmenteverygrain.py:42 39 from tensorflow.keras.optimizers import Adam 40 from tensorflow.keras.preprocessing.image import load_img ---> 42 from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor 44 def predict_image_tile(im_tile,model): 45 if len(np.shape(im_tile)) == 2: File D:\Anaconda\lib\site-packages\segment_anything\__init__.py:14 1 # Copyright (c) Meta Platforms, Inc. and affiliates. 2 # All rights reserved. 3 4 # This source code is licensed under the license found in the 5 # LICENSE file in the root directory of this source tree. 7 from .build_sam import ( 8 build_sam, 9 build_sam_vit_h, (...) 12 sam_model_registry, 13 ) ---> 14 from .predictor import SamPredictor 15 from .automatic_mask_generator import SamAutomaticMaskGenerator File D:\Anaconda\lib\site-packages\segment_anything\predictor.py:14 10 from segment_anything.modeling import Sam 12 from typing import Optional, Tuple ---> 14 from .utils.transforms import ResizeLongestSide 17 class SamPredictor: 18 def __init__( 19 self, 20 sam_model: Sam, 21 ) -> None: File D:\Anaconda\lib\site-packages\segment_anything\utils\transforms.py:10 8 import torch 9 from torch.nn import functional as F ---> 10 from torchvision.transforms.functional import resize, to_pil_image # type: ignore 12 from copy import deepcopy 13 from typing import Tuple ModuleNotFoundError: No module named 'torchvision'
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值