库提供了与Java可选的类似的可选对象。使用这个对象,您永远不会检查“如果x是none”
pyOptional的Python项目详细描述
说明
库提供了类似于Java optional的实现可选对象。 使用此对象,您将永远不会检查if x is None。
安装
pip install pyOptional
用法
示例
frompyOptionalimportOptionaloptional_with_value=Optional('ABC')optional_empty=Optional(None)print(optional_with_value)print(optional_empty)
输出:
Optional of: ABC Optional empty
方法:
获取()
返回值或抛出NoneValueErrorexception on on empty optional
print(optional_with_value.get())print(optional_empty.get())
输出:
ABC Traceback (most recent call last): ... pyOptional.exceptions.NoneValueError: Called get on empty optional
获取或其他(默认值)
返回值,如果存在或默认值为空
print(optional_with_value.get_or_else('XYZ'))print(optional_empty.get_or_else('XYZ'))
输出:
ABC XYZ
获取或其他获取(可调用的生成默认值)
返回值,如果存在,否则结果为 callable_for_generate_default_value
defgen_value():return'QWERTY'print(optional_with_value.get_or_else_get(gen_value))print(optional_empty.get_or_else_get(gen_value))print(optional_empty.get_or_else_get(lambda:'From lambda'))
输出:
ABC QWERTY From lambda
GETIORYORUP(异常类,*ARGs,**KWARGS)返回值,如果存在,或提供异常提供< /H4>print(optional_with_value.get_or_raise(FileNotFoundError,'Some message'))print(optional_empty.get_or_raise(FileNotFoundError,'Some message'))
输出:
ABC Traceback (most recent call last): ... FileNotFoundError: Some message
映射(可调用的转换值)
返回其他值的可选值(结果由返回 callable_to_transform_value)或可选空(如果源可选) 是空的
print(optional_with_value.map(lambdaval:val*2))print(optional_empty.map(lambdaval:val*2))
输出:
Optional of: ABCABC Optional empty
平面映射(可调用的转换值)
类似于map,但是如果source optional包含另一个optionals, 结果将包含单个可选项
nested_val_optional=Optional(Optional(Optional(8)))nested_empty_optional=Optional(Optional(Optional(None)))print(nested_val_optional.map(lambdaval:val*3))print('---------------------')print(nested_empty_optional.map(lambdaval:val*3))print('---------------------')print(nested_val_optional.flat_map(lambdaval:val*3))print('---------------------')print(nested_empty_optional.flat_map(lambdaval:val*3))
输出:
Traceback (most recent call last): ... TypeError: unsupported operand type(s) for *: 'Optional' and 'int' --------------------- Traceback (most recent call last): ... TypeError: unsupported operand type(s) for *: 'Optional' and 'int' --------------------- Optional of: 24 --------------------- Optional empty
如果存在(func)
如果存在,调用FUNC并提供可选值。如果可选为空,则执行 没有什么。
optional_with_value.if_present(lambdaval:print('found value '+val))optional_empty.if_present(lambdaval:print('found value '+val))
输出:
found value ABC
是否存在()
如果可选不为空,则返回true,否则返回false
print(optional_with_value.is_present())print(optional_empty.is_present())
输出:
True False
静态方法:
empty()
返回空的可选值
print(Optional.empty())
输出:
Optional empty