Python에서 함수 매개변수로 변경 가능 항목 전달

3867 단어 beginnerspython
파이썬에서는 함수를 만드는 것이 비교적 매우 쉽습니다. 즉, 반환 유형이 없거나 유형이 전혀 없다고 말해야 합니다!

자, 여러분 중 일부는 유형 힌트가 여전히 중요하지 않다고 말할 수 있지만 저는 사실을 부인하고 이렇게 말할 것입니다..

The Python runtime does not enforce function and variable type annotations. They can be used by third party tools such as type checkers, IDEs, linters, etc.





깨끗하고 이해하기 쉬운 코드를 작성하는 데 확실히 도움이 됩니다.

어쨌든 주제에 관해서는, 변경 가능한 객체를 매개 변수로 함수에 전달하고 나중에 조작하려고 시도한 적이 있습니까? 아니? 적어도 위치 인수로는 할 수 없기 때문입니다. 그것은 그냥 실행되지 않으며 그다지 의미가 없습니다.

def pos_func([]):
    pass


좋습니다. 이제 통과된 목록에 어떻게 액세스합니까? 당신은 그것을 얻는다.
이제 목록을 키워드 인수로 전달하면 목록에 액세스하는 것은 큰 문제가 아니지만 조작하는 것은 큰 문제입니다.

def keyword_func(num, array=[]):
    array.append(num)
    return array

print(keyword_func(1))
print(keyword_func(2))
print(keyword_func(3))


출력은 다음과 같을 것으로 예상됩니다.

[1]
[2]
[3]


하지만 아니오, 실제 출력은

[1]
[1, 2]
[1, 2, 3]


그 이유는

The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes.



이 동작을 원하지 않고 후속 호출 간에 기본값을 공유하지 않으려면 대신 다음과 같이 함수를 작성할 수 있습니다.

def keyword_func(num, array=None):
    if array is None:
        array = [] 
    array.append(num)
    return array


모든 호출 간에 개체를 공유하지 않으려면 변경 가능한 개체를 함수에 전달하는 방법입니다.

이것은 여기 dev.to의 첫 번째 블로그였습니다. 이 블로그에 대해 느낀 점을 자유롭게 댓글로 남겨주세요. 다음 블로그는 위치 인수, 키워드 인수, 이들을 함께 사용하고 분리하는 방법에 관한 것입니다. 고맙습니다!

학점:
Type hinting Quote
Type hinting Meme
Reference and Examples

좋은 웹페이지 즐겨찾기