SORU
17 Aralık 2008, ÇARŞAMBA


Dize birleştirme vs dize ikame Python

Python, karşı dize ikame nerede ve ne zaman dize kullanarak birleştirme bulamıyorum. Dize birleştirme performansını büyük artırır gördüğü gibi, bu (daha fazla olma) biçimsel bir karardan ziyade bir pratik mi?

Somut bir örnek için, nasıl bir esnek URI inşaatı tanıtıcı:

DOMAIN = 'http://stackoverflow.com'
QUESTIONS = '/questions'

def so_question_uri_sub(q_num):
    return "%s%s/%d" % (DOMAIN, QUESTIONS, q_num)

def so_question_uri_cat(q_num):
    return DOMAIN   QUESTIONS   '/'   str(q_num)

Edit: ayrıca kullanarak ikame adlı dizeleri listesini katılma konusunda ve. öneriler olmuştur Bu bunu yapmak için Doğru Yol olan ana tema, çeşitleri, hangi zaman? Cevaplar için teşekkürler!

CEVAP
18 Aralık 2008, PERŞEMBE


Birleştirme (çok önemli) daha hızlı benim makineye göre. Ama üslup, eğer performans önemli değilse ikame bedeli ödemeye hazırım. Evet, ve eğer biçimlendirme ihtiyacım olursa, bunu sormak bile gerek yok... ama aradeğerleme/şablon kullanmak için seçenek yok.

>>> import timeit
>>> def so_q_sub(n):
...  return "%s%s/%d" % (DOMAIN, QUESTIONS, n)
...
>>> so_q_sub(1000)
'http://stackoverflow.com/questions/1000'
>>> def so_q_cat(n):
...  return DOMAIN   QUESTIONS   '/'   str(n)
...
>>> so_q_cat(1000)
'http://stackoverflow.com/questions/1000'
>>> t1 = timeit.Timer('so_q_sub(1000)','from __main__ import so_q_sub')
>>> t2 = timeit.Timer('so_q_cat(1000)','from __main__ import so_q_cat')
>>> t1.timeit(number=10000000)
12.166618871951641
>>> t2.timeit(number=10000000)
5.7813972166853773
>>> t1.timeit(number=1)
1.103492206766532e-05
>>> t2.timeit(number=1)
8.5206360154188587e-06

>>> def so_q_tmp(n):
...  return "{d}{q}/{n}".format(d=DOMAIN,q=QUESTIONS,n=n)
...
>>> so_q_tmp(1000)
'http://stackoverflow.com/questions/1000'
>>> t3= timeit.Timer('so_q_tmp(1000)','from __main__ import so_q_tmp')
>>> t3.timeit(number=10000000)
14.564135316080637

>>> def so_q_join(n):
...  return ''.join([DOMAIN,QUESTIONS,'/',str(n)])
...
>>> so_q_join(1000)
'http://stackoverflow.com/questions/1000'
>>> t4= timeit.Timer('so_q_join(1000)','from __main__ import so_q_join')
>>> t4.timeit(number=10000000)
9.4431309007150048

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • thelonelyisland

    thelonelyisl

    23 Aralık 2005
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009