SORU
22 ŞUBAT 2012, ÇARŞAMBA


Neden't Python bayt kodu derleme için önce sabit bir sayı aritmetik değerlendirmek değil mi?

Aşağıdaki kodda, neden f1 aynı bayt kodu için f2 derleme Python değil mi?

İçin bir sebep var mı?

>>> def f1(x):
    x*100

>>> dis.dis(f1)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (100)
              6 BINARY_MULTIPLY
              7 POP_TOP
              8 LOAD_CONST               0 (None)
             11 RETURN_VALUE
>>> def f2(x):
        xx * 10010

>>> dis.dis(f2)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (10)
              6 BINARY_MULTIPLY
              7 LOAD_CONST               1 (10)
             10 BINARY_MULTIPLY
             11 POP_TOP
             12 LOAD_CONST               0 (None)
             15 RETURN_VALUE

CEVAP
22 ŞUBAT 2012, ÇARŞAMBA


Bu x yan etkileri __mul__ bir yöntem olabilir çünkü. x * 10 * 10 x * 100 yalnızca bir kez çağırır iken __mul__ iki kez çağırır:

>>> class Foo(object):
...     def __init__ (self):
...             self.val = 5
...     def __mul__ (self, other):
...             print "Called __mul__: %s" % (other)
...             self.val = self.val * other
...             return self
... 
>>> a = Foo()
>>> a * 10 * 10
Called __mul__: 10
Called __mul__: 10
<__main__.Foo object at 0x1017c4990>

Otomatik olarak sabitler, katlama ve sadece __mul__ arama bir kez davranış değişikliği olabilir.

Sen-ebilmek almak optimizasyonu istediğiniz tarafından yeniden düzenleme işlemi, bir sabit, çarpılan ilk (ya da bahsedildiği gibi açıklamalarda kullanarak parantez grup onlar gibi onlar sadece ameliyat birlikte, ne olursa olsun pozisyon), böylece açık yapma arzun için katlama başına:

>>> def f1(x):
...     return 10 * 10 * x
... 
>>> dis.dis(f1)
  2           0 LOAD_CONST               2 (100)
              3 LOAD_FAST                0 (x)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE 

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • JamesAtiPhone

    JamesAtiPhon

    16 EYLÜL 2010
  • lissaandbeauty

    lissaandbeau

    24 Aralık 2011