programing

없음을 암시하는 파이썬 3타입?

goodsources 2023. 5. 26. 20:54
반응형

없음을 암시하는 파이썬 3타입?

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: str|????=None):
    pass

함수에서 파이썬에 유형 힌트를 설정하려고 하는데, 다음을 사용하여 둘 이상의 유형 힌트를 추가할 수 있습니다.something: str|bool='default value'하지만, 암시하는 유형은 무엇입니까?None? :/

예를 들어,

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: str|????=None):
    ...

귀하의 사용 사례가 "뭔가 또는 없음"이라는 것을 알게 되었습니다.

버전 3.5부터 Python은 모듈을 통해 형식 주석을 지원합니다.그리고 여러분의 경우, 주석을 다는 방법은 힌트를 사용하는 것이 좋습니다.이것은 당신이 찾고 있는 정확한 의미를 가지고 있습니다.

그러므로 힌트는another_string_or_None다음과 같습니다.

import typing

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: typing.Optional[str]=None):
    ...

Python 3.10은 원하는 원래 표기법을 지원합니다.str | None.

원천

이건 그저.None!

>>> def nothing(nun: None) -> None:
...     return nun
... 
>>> nothing(None)
>>> 

아니면 적어도 그럴 수도 있습니다.

이러한 주석들은 구문이 정확한 것 이상으로 Python에게 의미가 없기 때문에 도구에 달려 있습니다.

예를 들어 type check-decorator를 사용하는 경우 다음을 사용해야 합니다.type(None):

>>> import typecheck as tc
>>>
>>> @tc.typecheck
>>> def nothing(nun: type(None)) -> type(None):
...     return nun
... 
>>> nothing(None)
>>> nothing(0)
typecheck.framework.InputParameterError: nothing() has got an incompatible value for nun: 0
>>> nothing(False)
typecheck.framework.InputParameterError: nothing() has got an incompatible value for nun: False

또한 Typecheck를 사용하여 "둘 이상의 유형 힌트 추가"를 보다 명확하게 할 수 있습니다.tc.any()(또는),tc.all()(AND), 그리고 훨씬 더 많은 것.

조심해요tc.none()NAND와 유사한 술어입니다. 찾고 있는 것이 아닙니다. 인수가 없으면 다음과 같은 모든 유형을 허용합니다.tc.all()아니면 더 적합한tc.anything.

@mbdevpl 덕분에 이 질문이 답으로 간주된다는 것을 알지만, 저는 그것을 추가하고 싶었습니다.type(None)None 유형에 대한 실제 값을 얻는 방법입니다. 예를 들어, 이것은 예를 들어 유용할 수 있습니다.if statement check예:

if isinstance(x_var, type(None)):
    pass

그 이후로python3.5do를 사용할 수도 있습니다.Union여기에 표시된 것처럼 없음을 가진 여러 유형:

x_var: typing.Union[str, None]
y_var: typing.Union[Dict, List, None]

이는 다음과 같습니다.

x_var: typing.Optional[str]
y_var: typing.Optional[typing.Union[Dict, List]]

PEP-0484에 따르면: "유형 힌트에 사용할 때, 다음과 같은 표현이 사용됩니다.None와 동등한 것으로 간주됩니다.type(None)."

다음을 위해 유형 힌트 서명으로 사용할 때 이 문제를 해결했습니다.@functools.singledispatch그리고 논쟁에 주석을 달기None기능 파견 장식가를 위해 작동합니다.

언급URL : https://stackoverflow.com/questions/19202633/python-3-type-hinting-for-none

반응형