SORU
31 Ocak 2011, PAZARTESİ


Python kapatma: üst kapsam değişken Yazmak

Bir işlev içinde aşağıdaki kodu var:

stored_blocks = {}
def replace_blocks(m):
    block = m.group(0)
    block_hash = sha1(block)
    stored_blocks[block_hash] = block
    return '{{{%s}}}' % block_hash

num_converted = 0
def convert_variables(m):
    name = m.group(1)
    num_converted  = 1
    return '<%%= %s %%>' % name

fixed = MATCH_DECLARE_NEW.sub('', template)
fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed)
fixed = MATCH_FORMAT.sub(convert_variables, fixed)

stored_blocks ekleme elemanları gayet iyi çalışıyor, ama ikinci subfunction num_converted artış edemem:

UnboundLocalError: yerel değişken 'num_converted' atama önce başvurulan

global kullanabilirim ama genel değişkenler çirkin ve ben bu değişken global olmaya gerek yok.

Ana işlevi bu kapsamda bir değişken için nasıl yazabilirim merak ettim. nonlocal num_converted muhtemelen işini yapar, ama Python 2 ile çalışan bir çözüm istiyorum.x.

CEVAP
31 Ocak 2011, PAZARTESİ


Tek öğeli bir dizi içine num_converted çevirin.

num_converted = [0]
def convert_variables(m):
    name = m.group(1)
    num_converted[0]  = 1
    return '<%%= %s %%>' % name

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011