Ruby 기호와 동등한 Python이 있습니까?
Ruby 기호와 동등한 Python이 있습니까?
그렇다면 그것은 무엇입니까?
그렇지 않다면 사전에서만 문자열 을 키로 사용 하고 있습니까?
아니요, 파이썬에는 기호 유형이 없습니다.
그러나 문자열 리터럴은 기본적으로 인턴되며 다른 문자열은 intern
함수를 사용하여 인턴 될 수 있습니다 . 따라서 사전에서 문자열 리터럴을 키로 사용하는 것은 루비에서 기호를 사용하는 것보다 성능이 떨어집니다.
다른 사람들이 말했듯이 Python에는 기호가 없지만 문자열은 잘 작동합니다.
문자열을 키로 인용하지 않으려면 dict () 생성자 구문을 사용하십시오.
d = dict(
a = 1,
b = 2,
c = "Hello there",
)
또한 관심있는 사람들을 위해 : 해시에서 사용될 때 Ruby의 기호는 Python의 빈 객체와 매우 유사합니다. 예를 들어 다음과 같이 할 수 있습니다.
some_var = object()
그런 다음 사전 키를 some_var로 설정합니다.
some_dict = { some_var : 'some value' }
그런 다음 표준 검색을 수행하십시오.
some_dict[some_var]
그러나 sepp2k가 언급했듯이 이렇게해도 성능상의 이점은 없습니다. 사실 저는 빠른 테스트를했고 성능 향상이 거의 또는 전혀 나타나지 않았습니다.
a, b, c, d, e = [object() for _ in range(5)]
dict_symbols = {a : 'a', b : 'b', c : 'c', d : 'd', e : 'e'}
dict_strings = {'a' : 'a', 'b' : 'b', 'c' : 'c', 'd' : 'd', 'e' : 'e'}
def run_symbols():
for key in dict_symbols.keys():
dict_symbols[key]
def run_strings():
for key in dict_strings.keys():
dict_strings[key]
ipython에서 테스트 된 속도 :
In [3]: %timeit run_symbols
10000000 loops, best of 3: 33.2 ns per loop
In [4]: %timeit run_strings
10000000 loops, best of 3: 28.3 ns per loop
그래서 제 경우에는 '기호'가 느리게 실행됩니다! (재미있는 숫자, 정확하지 않음). 그러나 이러한 방식으로 수행하면 메모리 이점이있을 수 있습니다. 키 유형에 신경 쓰지 않으면 객체는 문자열보다 작은 공간을 갖습니다.
import sys
sys.getsizeof('some_var') # 45
some_var = object()
sys.getsizeof(some_var) # 0
그것이 파이썬이 some_var라는 변수 이름의 메모리를 어떻게 취급하는지에 대한 질문을 제기하지만.
- 아니오, 동등한 것은 없습니다.
- 모든 해시 가능한 객체를 사전 키로 사용할 수 없습니다.
일류 유형은 아니지만 https://pypi.python.org/pypi/SymbolType 이 존재합니다 .
참고 URL : https://stackoverflow.com/questions/3743532/is-there-a-python-equivalent-to-ruby-symbols
'Development Tip' 카테고리의 다른 글
Aurelia 델리게이트 대 트리거 : 언제 델리게이트 또는 트리거를 사용해야하는지 어떻게 알 수 있습니까? (0) | 2020.11.11 |
---|---|
다중 세트, 맵 및 해시 맵 복잡성 (0) | 2020.11.11 |
파일에서 이미지를 연 다음 잠금을 해제 하시겠습니까? (0) | 2020.11.10 |
입력 할 때 html 텍스트 입력 필드가 커지나요? (0) | 2020.11.10 |
C에서 char 배열을 복사하는 방법은 무엇입니까? (0) | 2020.11.10 |