Python3 함수에서 유형 메모(Function Annotations)

1841 단어

문제 설명:

def read_text(path: Path, encoding=None) -> str:
    """
    Not Path.read_text for compatibility with Python 3.4.
    """
    with path.open(encoding=encoding) as f:
        return f.read()

이 코드를 보았을 때 순간 멍해졌다. 이것은 Python3의 최신 함수 유형 주석 특성이다. 그러나 인터넷에서 중국어 자료를 찾았는데 보고 알 수 있는 문장을 발견했다.https://zhuanlan.zhihu.com/p/37239021) 잘못 쓴 곳이 있다. "그러나 마찬가지로 이것들은 단지'주해'일 뿐 코드에 아무런 영향을 미치지 않는다."파이썬 유형의 주석을 검색하면 순위가 높아서 나를 참혹하게 만들었다. 다행히 나는 공식 문서[1]를 찾았고 공식 문서를 볼 것을 건의했다. 그래서 블로그를 써서 다른 사람이 이런 저급한 실수를 범하지 않도록 기록해 두었다.

솔루션:


사실 잘 이해됩니다. : 형식으로 함수의 매개 변수 유형을 지정하고, -> 형식으로 함수의 반환값 유형을 지정합니다.Python 해석기는 이 주석들 때문에 추가 검사를 제공하지 않습니다. 어떤 종류의 검사 작업도 없습니다.즉, 이러한 유형의 주석을 넣든 안 넣든 당신의 코드에 아무런 영향을 주지 않는다는 것이다.그러나 다음과 같은 코드가 나타납니다.
   def load_model(self,
                   load_name: str,
                   load_epoch: int,
                   frozen_layer_count: int = 0,
                   allowed_characters_for_loaded_model: List[chr] = english_frequent_characters,
                   use_kenlm: bool = False,
                   reinitialize_trainable_loaded_layers: bool = False,
                   language_model_name_extension: str = ""):

매개 변수 주석 뒤에 = 번호가 있습니다. 매개 변수가 들어오지 않을 때 뒤에 있는 등호의 값을 기본으로 합니다. (기본 매개 변수에 해당합니다!!)

실험 증명:


함수 주석의 함수를 정의합니다. 일부 파라미터는 주석 형식에만 기본 파라미터가 없습니다.
def foobar(a: int , b: str = 'softmax', c: float = 3.2) -> tuple:
    return a, b, c

다음 코드를 실행합니다.
a, b, c = foobar(a=1) 
print(a, b, c)

출력:
1 softmax 3.2

따라서 기본 파라미터가 파라미터를 전송하지 않으면 자동으로 기본값을 선택합니다.

reference:


【1】https://www.python.org/dev/peps/pep-3107/

좋은 웹페이지 즐겨찾기