Programing

python, del, delattr 중 어느 것이 더 나은가?

c10106 2022. 4. 1. 19:58
반응형

python, del, delattr 중 어느 것이 더 나은가?

이건 바보 같은 짓일 수도 있지만, 한동안 내 뒤통수를 조르고 있어.

Python은 우리에게 del 명령어와 delattr 내장 함수의 두 가지 속성을 삭제할 수 있는 내장된 방법을 제공한다.나는 그것이 좀 더 명백하다고 생각하기 때문에 델라트르를 선호한다.

del foo.bar
delattr(foo, "bar")

그런데 혹시 그들 사이에 성하의 차이가 있는 건 아닌지 궁금하다.

첫번째가 두번째보다 더 효율적이다. del foo.bar2바이트 코드 지침으로 컴파일:

  2           0 LOAD_FAST                0 (foo)
              3 DELETE_ATTR              0 (bar)

반면에delattr(foo, "bar")5:00이 걸린다.

  2           0 LOAD_GLOBAL              0 (delattr)
              3 LOAD_FAST                0 (foo)
              6 LOAD_CONST               1 ('bar')
              9 CALL_FUNCTION            2
             12 POP_TOP             

이것은 첫 번째 주행이 약간 더 빨리 진행되는 것으로 해석된다(그러나 그것은 큰 차이가 아니다 - 내 기계에서 .15 μs).

다른 사람들이 말했듯이, 삭제 중인 속성이 동적으로 결정되었을 때에만 두 번째 형식을 사용해야 한다.

[ 컴파일러가 사용할 수 있는 함수 내에서 생성된 바이트 코드 지침을 표시하도록 편집됨LOAD_FAST그리고LOAD_GLOBAL]

  • 이 더 명확하고 효율적이다.
  • delattr은 동적 속성 삭제를 허용한다.

다음 예를 생각해 보십시오.

for name in ATTRIBUTES:
    delattr(obj, name)

또는:

def _cleanup(self, name):
    """Do cleanup for an attribute"""
    value = getattr(self, name)
    self._pre_cleanup(name, value)
    delattr(self, name)
    self._post_cleanup(name, value)

델로는 할 수 없어

의심할 여지 없이 전자.내 생각에 이건 그냥 물어보는거야?foo.bar보다 낫다getattr(foo, "bar"), 그리고 나는 아무도 그런 질문을 하고 있지 않다고 생각한다 :)

그것은 정말로 선호의 문제지만, 첫 번째는 아마도 더 선호될 것이다.미리 삭제하는 속성의 이름을 모르면 두 번째 속성만 쓰겠다.

getattr, setattr과 마찬가지로 delattr은 속성 이름을 알 수 없는 경우에만 사용해야 한다.

그런 면에서, 그것은 일반적으로 이용할 수 있는 것보다 더 낮은 수준에서 내장 기능에 접근하는 데 사용되는 몇 가지 비단뱀 기능과 대략 동등하다.__import__대신에import그리고operator.add대신에+

내부 작업에 대해서는 확실하지 않지만, 코드 재사용이 가능하고 얼빠진 동료가 되지 않는 관점에서 델을 사용하십시오.그것은 다른 언어에서 온 사람들에 의해서도 더 명확하고 이해된다.

생각한다면delattr좀 더 노골적인데, 그럼 왜 사용하지 않는 거지?getattr보다도 항상object.attr?

후드 아래는...저도 잘 모르겠군요.현저히 낫지 않다면.

그것은 오래된 질문이지만 나는 내 2센트를 넣고 싶다.

그래도.del foo.bar더 우아하고 때로는 필요할 때도 있다.delattr(foo, "bar"). 예를 들어, 사용자가 이름을 입력하여 개체의 멤버를 동적으로 삭제할 수 있는 대화형 명령줄 인터페이스가 있다면, 후자의 형식을 사용할 수밖에 없다.

참조URL: https://stackoverflow.com/questions/1120927/which-is-better-in-python-del-or-delattr

반응형