python, del, delattr 중 어느 것이 더 나은가?
이건 바보 같은 짓일 수도 있지만, 한동안 내 뒤통수를 조르고 있어.
Python은 우리에게 del 명령어와 delattr 내장 함수의 두 가지 속성을 삭제할 수 있는 내장된 방법을 제공한다.나는 그것이 좀 더 명백하다고 생각하기 때문에 델라트르를 선호한다.
del foo.bar
delattr(foo, "bar")
그런데 혹시 그들 사이에 성하의 차이가 있는 건 아닌지 궁금하다.
첫번째가 두번째보다 더 효율적이다. del foo.bar
2바이트 코드 지침으로 컴파일:
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
'Programing' 카테고리의 다른 글
Python 3으로 pip을 설치하는 방법? (0) | 2022.04.01 |
---|---|
OnSubmit 함수가 반응에서 반응 후크 상태 변수를 업데이트하지 않음 (0) | 2022.04.01 |
Python 수퍼()가 TypeError를 발생시킴 (0) | 2022.04.01 |
typecript와 함께 State를 사용할 수 없음('useState' 이름을 찾을 수 없음) (0) | 2022.04.01 |
형식:변수를 내보내는 방법 (0) | 2022.04.01 |