Python : 함수에 매개 변수 전달

Gowtham Ganesh

Python 전문가,

Python을 사용하여 BST를 구현하려고 시도했으며 여기에 삽입 함수에 대한 코드가 있습니다.

초안 1 :

def insert(self, val):
    newNode = self._Node(val)

    if (self._root is None):
        self._root = newNode
    else:
        self._insert(self._root,val)

def _insert(self, node, val):

    if node is None:
        node = self._Node(val)

    elif val >= node._val:

        self._insert(node._right, val)
    else:
        self._insert(node._left, val)

하지만 뿌리를 제외하고는 나무를 만들 수 없습니다. 나는 아래 코드를 수정하면 괜찮아지기 때문에 두 함수를 전달하는 매개 변수로 어딘가에 엉망이 된 것 같습니다.

초안 2 :

def insert(self, val):
    newNode = self._Node(val)

    if (self._root is None):
        self._root = newNode
    else:
        self._insert(self._root,val)

def _insert(self, node, val):

    if val >= node._val:
        if node._right is None:
                node._right = self._Node(val)
        else:
                self._insert(node._right, val)
    else:
        if node._left is None:
                node._left = self._Node(val)
        else:
                self._insert(node._left, val)

초안 2가 작동하는 이유를 이해하려고 노력하고 있지만 초안 1은 작동하지 않습니다. 여기에 도움이 필요하십니까? 미리 감사드립니다!

juanpa.arrivillaga

근본적인 오해는 변수 할당이 어떻게 작동하고 Python의 평가 전략과 상호 작용하는지 입니다.

기본적으로 첫 번째 초안에서 다음을 수행 할 때 :

def _insert(self, node, val):

    if node is None:
        node = self._Node(val)
    ...

단순히 이름 (변수) node에 값을 할당하고 self._Node(val)있지만 범위를 벗어나면 새 개체가 파괴됩니다! node메서드 호출에 의해 전달 된 값을 참조하는 데 사용 되었지만 단순 할당은 이름으로 참조되는 객체를 변경하지 않고 이름을 다시 할당합니다.

그러나 두 번째 초안에서 :

def _insert(self, node, val):

    if val >= node._val:
        if node._right is None:
            node._right = self._Node(val)
        else:
            self._insert(node._right, val)

당신은 개체 변이되는 , 즉`node._right = self._Node (발)

다음은 빛을 발하는 간단한 예입니다.

>>> def only_assign(object):
...   x = 3
...   object = x
... 
>>> def mutate(object):
...   object.attribute = 3
... 
>>> class A:
...   pass
... 
>>> a = A()
>>> a
<__main__.A object at 0x7f54c3e256a0>
>>> only_assign(a)
>>> a
<__main__.A object at 0x7f54c3e256a0>
>>> mutate(a)
>>> a.attribute
3

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Python에 URL 매개 변수 전달

분류에서Dev

Python에서 R 함수로 벡터 및 매개 변수 전달

분류에서Dev

svelte 함수에 매개 변수 전달

분류에서Dev

_beginthread 함수에 매개 변수 전달

분류에서Dev

함수에 매개 변수 전달

분류에서Dev

함수 (e)에 매개 변수 전달

분류에서Dev

Matlab 함수에 매개 변수 전달

분류에서Dev

BASH 함수에 매개 변수 전달

분류에서Dev

함수에 매개 변수 전달

분류에서Dev

Python 3에서 가변 개수의 매개 변수 전달

분류에서Dev

bash 함수 내에서 python -c에 매개 변수를 전달합니까?

분류에서Dev

Python Bottle : 매개 변수를 함수 핸들러에 전달하는 방법

분류에서Dev

Python-명령 줄을 통해 모듈 함수에 매개 변수 전달

분류에서Dev

매개 변수 목록을 하나의 문자열로 Python 함수에 전달

분류에서Dev

Python : Python 방식으로 함수에서 함수에 여러 매개 변수 전달

분류에서Dev

매개 변수로 함수 전달

분류에서Dev

SQL 함수 매개 변수 전달

분류에서Dev

매개 변수로 함수 전달

분류에서Dev

매개 변수로 함수 전달

분류에서Dev

매개 변수로 'this'전달

분류에서Dev

BackboneJS 전달 매개 변수

분류에서Dev

다른 함수의 매개 변수에 함수 전달

분류에서Dev

다른 함수 오류에 매개 변수로 함수 전달

분류에서Dev

jquery 변수를 php 함수에 매개 변수로 전달

분류에서Dev

Databricks (Python)에서 SQL에 매개 변수 전달

분류에서Dev

Python 함수가 전달 된 매개 변수의 값을 변경합니다.

분류에서Dev

jquery : 모달에 매개 변수 전달

분류에서Dev

Python의 명령 줄에서 매개 변수 전달

분류에서Dev

Python에서 선택적 매개 변수 전달

Related 관련 기사

뜨겁다태그

보관