Development Tip

Ruby 기호와 동등한 Python이 있습니까?

yourdevel 2020. 11. 11. 20:43
반응형

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라는 변수 이름의 메모리를 어떻게 취급하는지에 대한 질문을 제기하지만.


  1. 아니오, 동등한 것은 없습니다.
  2. 모든 해시 가능한 객체를 사전 키로 사용할 수 없습니다.

일류 유형은 아니지만 https://pypi.python.org/pypi/SymbolType 이 존재합니다 .

참고 URL : https://stackoverflow.com/questions/3743532/is-there-a-python-equivalent-to-ruby-symbols

반응형