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ş:
Kapsam hata Python değişken...
&; Az Şaşkınlık " " Python: Değiş...
Nasıl Python değişken türünü belirleme...
Dosya için satır yazmak için doğru yol...
Nasıl Python iki değişken mantıksal xo...