>  기사  >  백엔드 개발  >  Python 함수 매개변수 전달 메커니즘에 대한 심층적인 이해

Python 함수 매개변수 전달 메커니즘에 대한 심층적인 이해

高洛峰
高洛峰원래의
2016-10-19 17:16:331273검색

먼저 언급해야 할 점은 C 및 C++처럼 Python에서는 매개변수를 값으로 전달하는 데 인수가 없다는 것입니다. 파이썬의 모든 것은 객체이며, 이는 또한 기본 유형이 없습니다.

파이썬에서는 유형이 객체에 속하고 변수에는 유형이 없습니다. 이것이 파이썬의 언어 특징이자 많은 파이썬 사용자들의 관심을 끄는 점입니다. 모든 변수는 메모리의 객체에 대한 "참조"로 이해될 수 있으며 C에서는 void*처럼 보일 수도 있습니다. 그러므로 파이썬 변수를 볼 때 실제 메모리 객체와 변수를 분리할 수 있기를 바랍니다.

유형은 변수가 아닌 객체에 속합니다. 이런 식으로 많은 문제를 생각하기가 더 쉬워질 것입니다.

파이썬의 모든 것은 객체이기 때문에, 파이썬의 함수 매개변수는 모두 참조(포인터로 이해될 수 있음)로 전달됩니다. 말하자면, 말하자면, 매개변수를 참조로 전달하는 방법은 이미 다들 잘 알고 계실 거라 믿습니다.

보충: 위 내용을 주의 깊게 읽었을 뿐입니다. 다음 사례만으로는 이해하지 못하는 초보자도 있을 수 있으므로 여기서는 두 가지 개인적인 결론을 더 내겠습니다.

함수는 참조로 전달되므로 매개변수 arg를 전달하는 경우 매개변수 arg가 함수 내에서 수정되어 함수 외부의 변수에 영향을 미치는 것을 원하지 않습니다. , 이 효과를 얻으려면 다른 언어로 변수를 복사하는 것을 생각하시나요? 하지만 파이썬에는 복사본이라는 것이 없지만 객체 유형을 제공합니다(불변 객체, 개인적인 평가, 이런 유형의 객체는 아마도 이런 이유로 생성된 것 같습니다, 하하). 이제 불변 변수 객체 imvar가 함수에 전달되고 imvar가 함수 내에서 수정된다고 가정합니다. imvar는 불변 객체이므로 이를 수정할 때 컴파일러는 먼저 이에 대한 복사 객체를 생성한 다음 이를 수정합니다. 따라서 함수에서 수정된 내용은 실제로 원래 개체 imvar가 아니므로 해당 값은 여전히 ​​함수 처리에 들어가기 전의 값입니다. 반대로 변수형 변수를 전달하면 참조에 직접 수정되기 때문에 함수 내부와 외부에서 동일한 객체가 연산되므로 함수 내부의 연산이 함수 외부의 동일한 변수의 값에 직접적인 영향을 미치게 됩니다. . 지금은 이해하기가 더 쉬웠는지 모르겠습니다. 아직도 명확하게 이해되지 않는다면 다음 예를 보고 이해하시기 바랍니다.

아래 테스트 케이스가 바로 제공됩니다.

이해하셨나요?

#test
num=10
string='test'
tupleset=(1,2,3)
listset=[9,8,7]
def change(num,string,tupleset,listset):
    num+=1
    string+=' into new words!'
    #tupleset.add(12)   error
    tupleset=(12,3,4,4)
    listset.append(10000)
change(num,string,tupleset,listset)  
print num,string,tupleset,listset
------------------------------------------------
ans:10 test (1, 2, 3) [9, 8, 7, 10000]

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.